我正在尝试将从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"格。
答案 0 :(得分:3)
您没有从控制器返回错误状态,因此结果始终被视为成功。而不是只返回一个字符串,使用ActionResult
作为包装器,以便您可以指定状态代码:
return new HttpStatusCodeResult(500, "An error occurred.");
答案 1 :(得分:0)
更好地解释codroipo已经评论的内容:
当您在catch块中返回错误消息时,AJAX函数认为它是成功的,这意味着它永远不会出现在AJAX"错误"块。
你可以让异常抛出并在AJAX处理它#34;错误"块
或者保持这种方式并返回一个撰写对象,如下所示:
[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);
}
如果结果还不错,请告诉我!
答案 2 :(得分:0)
这对我有用:
[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中。