如果控制器失败,如何在视图中显示错误?ASP.NET MVC

4

服务器端,我有一个返回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>

但是没有弹出“发布失败”的提示窗口。
最好的问候。

非常抱歉出现了那些错误,我刚刚编辑了我的问题。saveOptions 实际上是 ajaxOption,我复制了错误的名称。谢谢。 - Adrian Chiritescu
你在服务器端检查的原因是什么?这可以通过客户端验证完成。 - Grizzly
好的,既然现在我清楚了一些... 我会假设你的错误没有显示是因为响应代码在 200 范围内... 你可以抛出一个异常来让它进入 500 范围。 - Grizzly
@T_Roy 感谢您的时间,抛出异常已经起作用了。 - Adrian Chiritescu
不用了,@T_Roy。不要再浪费时间了,因为我已经按照你说的方法使用下面的代码,在抛出异常后发现确实是这个问题。再次感谢你! - Adrian Chiritescu
显示剩余4条评论
1个回答

2
这里的问题是Ajax助手认为你的所有响应都是成功的。你的控制器操作返回HTTP 200,所以没有问题。AjaxOptions.OnFailure属性表示:如果响应状态不在200范围内,则调用此函数。因此,您需要使用成功处理程序并显式检查JSON success参数。或者让您的操作更改响应的HttpStatusCode。
if (notValid)
{
    Response.StatusCode = 400;  // Bad Request
    return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet);
}

如果这里有验证错误,我只需检查成功处理程序中是否存在错误。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接