我已经习惯了ASP.NET Webforms使用UpdatePanels进行AJAX的简单方法。我知道这个过程对MVC来说更具手工艺。
在特定情况下,我正在使用数据注释来验证某些表单输入。我使用HTML.ValidationMessageFor帮助程序来显示错误消息。如果我想使用AJAX发布此表单并显示此错误消息,那么该过程会是什么?是否可以保留HTML.ValidationMessageFor并使其与AJAX一起使用?
谢谢。
答案 0 :(得分:5)
您使用的是内置的AJAX方法吗?例如,您是否使用Ajax.BeginForm(...)
创建了AJAX表单?如果是这样,显示验证消息非常容易。
还有一件事:你想为每个不正确的控件显示验证信息,还是只想在表单上方有一个验证摘要?我很确定你要问的是为每个控件显示一条单独的信息,但是为了以防万一,我会把它们都包括在内。
首先,您需要将表单输入放在部分视图中。我将其称为部分视图RegisterForm.ascx
。
接下来,您应该在视图中使用 :
<% using (Ajax.BeginForm("MyAction", null,
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "myForm"
},
new {
id = "myForm"
})) { %>
<% Html.RenderPartial("RegisterForm"); %>
<% } %>
最后,您的控制器操作应如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(CustomViewModel m)
{
if(!m.IsValid) //data validation failed
{
if (Request.IsAjaxRequest()) //was this request an AJAX request?
{
return PartialView("RegisterForm"); //if it was AJAX, we only return RegisterForm.ascx.
}
else
{
return View();
}
}
}
您应首先创建单独的ValidationSummary Partial View 。以下是ValidationSummary.ascx
的代码应该是什么样的:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary("Form submission was unsuccessful. Please correct the errors and try again.") %>
接下来,在您的视图中,您应该有这样的内容:
<div id="validationSummary">
<% Html.RenderPartial("ValidationSummary"); %>
</div>
<% using (Ajax.BeginForm("MyAction", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %>
<!-- code for form inputs goes here -->
<% } %>
最后,您的控制器操作应该类似于:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(CustomViewModel m)
{
if(!m.IsValid) //data validation failed
{
if (Request.IsAjaxRequest()) //was this request an AJAX request?
{
return PartialView("ValidationSummary"); //if it was AJAX, we only return the validation errors.
}
else
{
return View();
}
}
}
希望有所帮助!
答案 1 :(得分:1)
这篇文章可能会有所帮助: ScottGu's blog: ASP.NET MVC 2: Model Validation
MVC中使用的验证可以是客户端和服务器端。要启用客户端验证,请使用:
<% Html.EnableClientValidation(); %>
在您视图中的某处声明。这样就无需使用AJAX将表单发布到服务器,然后以内联方式显示结果,因为启用了javascript的用户将拥有自己的客户端验证。