控制器中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中。

控制器中catch块抛出的消息没有正确显示

您没有从控制器返回错误状态,因此结果总是被视为成功。不只是返回字符串,而是使用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中。