如果 Controller 失败,如何在 View 中显示错误? ASP.NETMVC
How to show error in View if the Controller fails ? ASP.NET MVC
在服务器端我有一个交易returns一个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-->
}
这是 Ajax 选项:
var ajaxOptions= new AjaxOptions
{
OnSuccess = "reload",
OnFailure = "FailMessage"
};
如果输入的文本超过 10 个字符,当按下 "Add" 按钮时,控制器正在 服务器端 上执行代码并失败,如何从那里获取错误消息并在视图中使用它来通知用户?
我试图提醒一条消息:
<script>
function FailMessage() {
alert("Fail Post");
}
</script>
但是没有弹出"Fail post"。
此致。
这里的问题是 Ajax 助手认为您的所有响应都是成功的。您的控制器操作正在返回 HTTP 200,因此没有问题。
AjaxOptions.OnFailure 属性
This function is called if the response status is not in the 200 range.
因此您需要使用成功处理程序并显式检查 JSON success
参数。
或者让您的操作更改响应的 HttpStatusCode。
if (notValid)
{
Response.StatusCode = 400; // Bad Request
return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet);
}
但是对于这里的验证错误,我只是检查成功处理程序中的错误。
是的,您应该在客户端和服务器上进行验证。
在服务器端我有一个交易returns一个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-->
}
这是 Ajax 选项:
var ajaxOptions= new AjaxOptions
{
OnSuccess = "reload",
OnFailure = "FailMessage"
};
如果输入的文本超过 10 个字符,当按下 "Add" 按钮时,控制器正在 服务器端 上执行代码并失败,如何从那里获取错误消息并在视图中使用它来通知用户?
我试图提醒一条消息:
<script>
function FailMessage() {
alert("Fail Post");
}
</script>
但是没有弹出"Fail post"。
此致。
这里的问题是 Ajax 助手认为您的所有响应都是成功的。您的控制器操作正在返回 HTTP 200,因此没有问题。
AjaxOptions.OnFailure 属性
This function is called if the response status is not in the 200 range.
因此您需要使用成功处理程序并显式检查 JSON success
参数。
或者让您的操作更改响应的 HttpStatusCode。
if (notValid)
{
Response.StatusCode = 400; // Bad Request
return Json(new { success = false, errorMessage = "error message" }, JsonRequestBehavior.AllowGet);
}
但是对于这里的验证错误,我只是检查成功处理程序中的错误。
是的,您应该在客户端和服务器上进行验证。