使用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>
答案 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对话框非常有用。