【问题标题】:ASP.NET MVC 2 server-side validation for ajax form用于 ajax 表单的 ASP.NET MVC 2 服务器端验证
【发布时间】:2011-03-18 11:15:17
【问题描述】:

我遇到了以下问题。我正在为该网站开发一个表单,这个表单应该有验证。我想使用本机 ASP.NET MVC 2 验证功能,但对它很固执。我有一个通过 $.get 加载并使用 jQuery UI 模式对话框显示的表单。我找到的所有示例都说明了如何使用简单表单的 MVC 验证并避免使用 Ajax 表单。

我可以为此表单启用客户端验证,但我需要正确处理服务器端验证。如何处理 ajax 表单的服务器端验证模型错误?

【问题讨论】:

    标签: ajax validation asp.net-mvc-2 webforms server-side


    【解决方案1】:

    当您将对象传回控制器时,您必须将代码包装在If ModelState.IsValid

    以下是我如何编辑用户的简化版本。第一个“EDIT”将用户对象发送到视图。第二个“EDIT”处理视图中的帖子。

    Function Edit() As ActionResult
        ''# do stuff to populate your User
        Return View(User)
    End Function
    
    <AcceptVerbs(HttpVerbs.Post)> _
    Function Edit(ByVal user as User)
        If ModelState.IsValid Then
            ''# do your valid stuff
        Else
            ''# The posted form was not valid, send the user back
            Return View(user)
        End If
    End Function
    

    在 C# 中也是这样

    public ActionResult Edit()
    {
        // do stuff to populate your User
        return View(User);
    }
    
    [AcceptVerbs(HttpVerbs.Post)]
    public object Edit(User user)
    {
        if (ModelState.IsValid) {
                // do your valid stuff
        } else {
            //'# The posted form was not valid, send the user back
            return View(user);
        }
    }
    

    编辑:

    在您看来,如果您想添加 AJAX 验证,只需添加以下内容。

        <% 
            Html.EnableClientValidation() ''# This is where all the magic happens.  It will build your clientside validation for you out of your MetaData.
            Using Html.BeginForm("Edit", "Users")
        %>
    
          <!-- all your markup crap -->
                <tr>
                    <td>
                        <%: Html.LabelFor(Function(model) model.UserName)%></td>
                    <td>
                        <%: Html.TextBoxFor(Function(model) model.UserName) %>
                        <%: Html.ValidationMessage("UserName", "*")%><br />
                    </td>
                </tr>
    
          <!-- somewhere you'll want to add a Validation Summary of all your errors -->
          <%= Html.ValidationSummary("Oops!, please correct the errors...") %>
    
    
          <% End Using%>
          <!-- bottom of the page -->
    
              <script src="../../Assets/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
              <script src="../../Assets/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
              <script src="../../Assets/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
    

    编辑:

    这里有一些关于使用Ajax.BeginForm进行渲染的信息
    http://singulartechnologies.com/asp-net-mvc-ajax-beginform-sample-code
    http://msdn.microsoft.com/en-us/library/dd381533.aspx
    http://weblogs.asp.net/mikebosch/archive/2008/02/15/asp-net-mvc-submitting-ajax-form-with-jquery.aspx

    【讨论】:

    • 请注意,VB 代码是通过转换器运行以获取 C# 的东西...我的 C# 印章不是应有的样子。
    • rockinthesixstring,感谢您的回复。此解决方案非常适用于非 ajax 表单,即使用 Html.BeginForm 助手创建的表单。但我使用 Ajax.BeginForm。如果模型无效,则不会更新表单以向用户显示验证摘要区域中的错误。
    • 在您的示例中,表单与所有页面内容一起提交。它不是 AJAX 形式。我希望表单提交在 ajax 中而不刷新整个页面(我使用 Ajax.BeginForm 助手的方法来构建此表单),因为我在模式对话框中显示表单,我需要决定是关闭它还是显示服务器端验证错误给用户。
    • Ajax 表单的处理方式相同,您只需发送 PartialView 而不是 View
    • 您能详细说明一下吗?抱歉,我对 ASP.NET MVC 比较陌生
    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多