带有 HTML.ValidationMessageFor 的 ASP.NET MVC AJAX
Posted
技术标签:
【中文标题】带有 HTML.ValidationMessageFor 的 ASP.NET MVC AJAX【英文标题】:ASP.NET MVC AJAX with HTML.ValidationMessageFor 【发布时间】:2011-03-24 06:06:18 【问题描述】:我已经习惯了 ASP.NET Webforms 使用 UpdatePanels 进行 AJAX 的简单方法。我知道使用 MVC 的过程更加手工。
在特定情况下,我使用数据注释来验证某些表单输入。我使用 html.ValidationMessageFor 助手来显示错误消息。如果我想使用 AJAX 发布此表单并显示此错误消息,流程是什么?是否可以保留 HTML.ValidationMessageFor 并使其与 AJAX 一起使用?
谢谢。
【问题讨论】:
【参考方案1】:您是否使用了内置的 AJAX 方法?例如,您是否使用 Ajax.BeginForm(...)
创建了 AJAX 表单?如果是这样,就很容易显示验证消息。
还有一件事:您想为每个不正确的控件显示验证消息,还是只想在表单上方显示验证摘要?我很确定您是在询问是否为每个控件显示单独的消息,但为了以防万一,我将两者都包括在内。
为每个不正确的控件显示单独的消息:
首先,您需要将表单输入放在部分视图中。我将其称为部分视图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();
仅在表单上方显示验证摘要:
您应该首先创建一个单独的 ValidationSummary 部分视图。 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 -->
<% %>
最后,您的 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();
希望有帮助!
【讨论】:
【参考方案2】:这篇文章可能会有所帮助: ScottGu's blog: ASP.NET MVC 2: Model Validation.
MVC 中使用的验证可以是客户端和服务器端。要启用客户端验证,请使用:
<% Html.EnableClientValidation(); %>
在您的视图中的某处声明。这消除了使用 AJAX 将表单发布到服务器然后内联显示结果的需要,因为启用了 javascript 的用户将拥有自己的客户端验证。
【讨论】:
以上是关于带有 HTML.ValidationMessageFor 的 ASP.NET MVC AJAX的主要内容,如果未能解决你的问题,请参考以下文章
带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName
使用带有 uuencode 的“sendmail”发送邮件,并带有主题