带有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(); } } }
希望有所帮助!