带有HTML.ValidationMessageFor的ASP.NET MVC AJAX

时间:2010-08-02 14:27:16

标签: asp.net-mvc ajax asp.net-mvc-2 asp.net-ajax jquery

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

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

谢谢。

2 个答案:

答案 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的用户将拥有自己的客户端验证。