带有HTML.ValidationMessageFor的ASP.NET MVC AJAX

我已经习惯了ASP.NET Webforms使用UpdatePanels进行AJAX的简单方法。 我理解这个过程对MVC来说更具手工艺。

在特定情况下,我使用数据注释来validation某些表单输入。 我使用HTML.ValidationMessageFor帮助程序来显示错误消息。 如果我想使用AJAX发布此表单并显示此错误消息,那么该过程是什么? 是否可以保留HTML.ValidationMessageFor并使其与AJAX一起使用?

谢谢。

本文可能会有所帮助: ScottGu的博客:ASP.NET MVC 2:模型validation 。

MVC中使用的validation可以是客户端和服务器端。 要启用客户端validation,请使用:

<% Html.EnableClientValidation(); %> 

在你看来某处的声明。 这样就无需使用AJAX将表单发布到服务器,然后以内联方式显示结果,因为启用了javascript的用户将拥有自己的客户端validation。

您使用的是内置的AJAX方法吗? 例如,您是否使用Ajax.BeginForm(...)创建了AJAX表单? 如果是这样,显示validation消息非常容易。

还有一件事:您是否希望为每个不正确的控件显示validation消息 ,或者您只是想在表单上方显示validation摘要 ? 我很确定你要问的是为每个控件显示一条单独的消息,但我会包括两个以防万一。


要为每个不正确的控件显示单个消息:

首先,您需要将表单输入放在部分视图中 。 我将称之为Partial View RegisterForm.ascx

接下来,您应该在视图中看到类似的内容:

 <% using (Ajax.BeginForm("MyAction", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "myForm" }, new { id = "myForm" })) { %> <% Html.RenderPartial("RegisterForm"); %> <% } %> 

最后,您的Controller Action应如下所示:

 [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(); } } } 

要仅在表单上方显示validation摘要:

您应该首先创建一个单独的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.") %> 

接下来, 在您的视图中 ,您应该具有以下内容:

 
<% Html.RenderPartial("ValidationSummary"); %>
<% using (Ajax.BeginForm("MyAction", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %> <% } %>

最后,您的Controller Action应该类似于:

 [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(); } } } 

希望有所帮助!