控制器中catch块抛出的消息没有正确显示
本文关键字:显示 消息 catch 控制器 | 更新日期: 2023-09-27 18:16:00
我正试图传递从ASP抛出的异常消息。. NET MVC控制器到JQuery的Ajax功能。但是消息没有正确显示。可能它被传递给成功块,因此在显示时错误消息的颜色不正确。
在控制器:[HttpPost]
public string ABC()
{
try
{
//some codes here
return message;
}
catch (Exception ex)
{
return "An error has occurred.";
}
}
在Ajax函数:-
success: function (data1) {
var message = data1;
HideMasterProcessing();
ShowNotificationMessage(message, "notifyMessage", "notify-info", false);
},
error: function (data2) {
var message = data2;
HideMasterProcessing();
ShowNotificationMessage(message, "notifyMessage","notify-errror", false);
}
我想在"notify-error"div中显示异常消息,但是它被显示在"notify-info"div中。
您没有从控制器返回错误状态,因此结果总是被视为成功。不只是返回字符串,而是使用ActionResult
作为包装器,以便您可以指定状态码:
return new HttpStatusCodeResult(500, "An error occurred.");
更好地解释codroipo已经注释的内容:
当您在catch块中返回错误消息时,AJAX函数认为它成功了,这意味着它永远不会落在AJAX"错误"块上。
您可以让异常抛出并在AJAX "error"块中处理
或者保持这种方式并返回一个compose对象,像这样:
[HttpPost]
public string ABC()
{
try
{
//some codes here
return new {Message = message, Error = null};
}
catch (Exception ex)
{
return new {Message = null, Error = "An error has occurred."};
}
}
在Ajax函数中:
success: function (data1) {
HideMasterProcessing();
if(data1.Error == null)
{
var message = data1.Message;
ShowNotificationMessage(message, "notifyMessage", "notify-info", false);
}
else
{
var message = data1.Error;
ShowNotificationMessage(message, "notifyMessage","notify-errror", false);
}
},
error: function (data2) {
var message = data2;
HideMasterProcessing();
ShowNotificationMessage(message, "notifyMessage","notify-errror", false);
}
让我知道如果结果是好的!
这对我有用:
[HttpPost]
public string ABC()
{
try
{
//some codes here
return message;
}
catch (Exception ex)
{
var message = "An error has occurred.";
return message;
}
}
在Ajax:
success: function (data1) {
if (data1 === "An error has occurred.")
{
HideMasterProcessing();
ShowNotificationMessage("An error has occurred. Please contact administrator.", "notifyMessage", "notify-error", false);
}
else
{
HideMasterProcessing();
var message = data1;
ShowNotificationMessage(message, "notifyMessage", "notify-info", false);
}
我只是比较了从控制器传入的字符串与成功块中输入的数据,然后将其显示在所需的div中。