在 服务器端 我有一个返回 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 个字符,当按下“添加”按钮时, Controller 正在 服务器端 上执行代码并失败,我如何从那里获取 errorMessage 并在此处使用它,在 View ,通知用户?
我试图提醒一条消息:
<script>
function FailMessage() {
alert("Fail Post");
}
</script>
但没有弹出“失败帖子”出现。
此致。
最佳答案
这里的问题是 Ajax 助手认为您的所有响应都是成功的。您的 Controller 操作返回 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 属性
因此,您需要使用成功处理程序并明确检查 JSON success
参数。
或者让您的操作更改响应的 HttpStatusCode。
if (notValid)
{
Response.StatusCode = 400; // Bad Request
return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet);
}
但是对于这里的验证错误,我只会检查成功处理程序中的错误。
是的,您应该在客户端和服务器上进行验证。