从Controller中的catch块抛出的消息未正确显示

时间:2015-10-05 14:59:46

标签: c# jquery ajax asp.net-mvc

我正在尝试将从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"格。

3 个答案:

答案 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中。