带有 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的主要内容,如果未能解决你的问题,请参考以下文章

MVC 常用方法

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

带有和不带有聚合的 sql 查询

如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片

CakePHP 如何处理带有/不带有 'id' 字段的 HABTM 表?