使用Ajax / jQuery提交ASP.NET MVC 3表单时的客户端验证

时间:2011-10-16 15:10:38

标签: asp.net-mvc asp.net-mvc-3 jquery

使用ASP.NET MVC 3时,使用Ajax和jQuery处理表单摘要时遇到客户端验证问题。

检查服务器端模型是否有效,但以下代码段不会触发客户端验证。

我错过了什么吗?

@model ViewModels.LeadDetailModelCore
@{using (Html.BeginForm("UpdateCore", "Leads", new { area = "Telesales" }, FormMethod.Post, new { id = "coreSave" }))
  {

    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    @Html.HiddenFor(model => model.Lead_ID)

                    @Html.LabelFor(model => model.LeadStatus_ID)
                    @Html.DropDownListFor(model => model.LeadStatus_ID, new SelectList(Model.LeadStatuses, "LeadStatus_ID", "LeadStatus_Name"), "-- Please select a status --")
                    @Html.ValidationMessageFor(model => model.LeadSource_ID)

     }}
    <script type="text/javascript">
    // NOTE ADD

    $(function () {

        $('#coreSave').die().live("submit", function (e) {
            e.preventDefault();
            var form = $(this);

            var val = form.validate()
            if (val.valid()) {
                $("#ProgressDialog").dialog("open");

                // post via ajax
            }


            return false;
        });
    });

</script>

1 个答案:

答案 0 :(得分:6)

确保您已包含正确的脚本:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

并且您manually parse validation表示所有动态DOM元素。因此,每次更新DOM时,如果在最初加载页面时此表单不是DOM的一部分,则应注册客户端验证:

$.validator.unobtrusive.parse($('#coreSave'));

您可能还会发现following answer对于使用部分视图的jQuery对话框非常有用。