【问题标题】:How to show error in View if the Controller fails ? ASP.NET MVC如果控制器失败,如何在视图中显示错误? ASP.NET MVC
【发布时间】:2017-09-13 15:35:27
【问题描述】:

服务器端我有一个返回JsonResult的事务:

public JsonResult DoStuff(Guid id, string userInputText)
{
     var product = _repository.Product(id); //busines logic

     //Only a specific product must have userInputText <= 10 characters. 
     //Other products may have as many characters as the user wants.
     if(product == Enum.SpecificProduct && userInputText.Count() > 10)
     {
          //The user input text comes from the View...
          //If it has more then 10 characters, need to send the errorMessage to the View.
          return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet);
     }

     //Otherwise, do stuff on the product... 

     //and return success at the end.
     return Json(new { success = true });
}

另一方面,在客户端我有这个:

using (Ajax.BeginForm("DoStuff", ajaxOptions))
{
    <span>Enter the text:</span>
    @Html.TextArea("userInputText", new { onkeyup = "SyncContents(); return false;" })

    <input type="submit" value="Add" />
    <!-- error message should be displayed here-->
}

这是 AjaxOptions:

var ajaxOptions= new AjaxOptions
{
    OnSuccess = "reload",
    OnFailure = "FailMessage"
};

如果输入的文本超过10个字符,当按下“添加”按钮时,控制器正在服务器端上执行代码并且失败,我怎样才能得到errorMessage从那里并在此处使用它,在视图中通知用户?

我试图提醒一条消息:

<script>
    function FailMessage() {
        alert("Fail Post");
    }
</script>

但没有弹出“发帖失败”。

最好的问候。

【问题讨论】:

  • 我不确定您的 ajaxOptions 是如何与上述代码中的 saveOptions 连接的。也许将您的 ajaxOptions 更改为新的 Ajaxoptions { OnSuccess = "reload", OnFailure = "FailMessage" },并记得在 "reload" 后添加一个 ","
  • 真的很抱歉这些错误,我刚刚编辑了我的问题。 saveOptions 实际上是 ajaxOption,我在处理错误的名称。谢谢。
  • 因此,用户在文本区域中最多只能输入 10 个字母。如果用户输入了 11 个或更多字符。那么您想要错误消息吗?
  • @T_Roy 是的,这正是我所需要的。
  • 您是否有理由在服务器端进行检查?这可以通过客户端验证来完成

标签: javascript html asp.net-mvc html-helper


【解决方案1】:

这里的问题是 Ajax 助手认为你的所有响应都是成功的。您的控制器操作返回 HTTP 200,所以没有问题。

https://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions.onfailure(v=vs.118).aspx#P:System.Web.Mvc.Ajax.AjaxOptions.OnFailure

AjaxOptions.OnFailure 属性

如果响应状态不在 200 范围内,则调用此函数。

因此,您需要使用成功处理程序并明确检查 JSON success 参数。

或者让您的操作更改响应的 HttpStatusCode。

if (notValid)
{
    Response.StatusCode = 400;  // Bad Request
    return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet);
}

但是对于这里的验证错误,我只是检查成功处理程序中的错误。

是的,您应该在客户端和服务器上进行验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2012-10-27
    • 2021-09-15
    相关资源
    最近更新 更多