使用 jQuery 验证和 MVC 验证在 ajax 中加载的表单
Validate a form loaded in ajax using jQuery validation and MVC
首先,我已经阅读了这个question,但它没有回答我的问题。
假设我有一个模型:
public class MyModel {
[Required]
public string Email { get; set; }
public string Text { get; set; }
}
和局部视图 _MyForm.cshtml :
@model MyModel
<form>
@Html.LabelFor(m=>m.Email)
@Html.TextBoxFor(m=>m.Email)
<br />
@Html.LabelFor(m=>m.Text)
@Html.TextBoxFor(m=>m.Text)
<br/>
<input type="submit" value="submit" />
</form>
returns 局部视图
的操作
public PartialViewResult GetView(){
return PartialView("_MyForm", new MyModel());
}
我通过 ajax
调用该视图
$.ajax({
url: "/Home/GetView",
dataType: "html",
success: function(html) {
$("#aDiv").html(html);
$("#aDiv :submit").on("click", function (){
$(this).closest("form").validate({
submitHandler: function (){ alert('valid'); }
});
});
}
});
问题是我没有填写电子邮件字段,而是显示警告对话框,使电子邮件(必填)字段带有红色边框。
如果我不使用 ajax 调用该视图,并且我在视图中使用 Html.RenderPartial('_MyForm', new MyModel())
那么它就可以工作。
换句话说,如果部分视图正常呈现(通过调用 RenderPartial
),则验证有效,如果通过 ajax 呈现,则验证无效。
为什么?我没有错误,我从 success
函数中记录了 html
参数,似乎没问题。
这很常见,当视图正常加载时,输入会在 dom 绑定验证器时出现。
当您通过 ajax 加载时,它们不是,因此它们不参与验证周期。
您可以通过在 ajax 成功处理程序中调用此代码让他们参与进来
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
这会将控件添加到验证周期
首先,我已经阅读了这个question,但它没有回答我的问题。
假设我有一个模型:
public class MyModel {
[Required]
public string Email { get; set; }
public string Text { get; set; }
}
和局部视图 _MyForm.cshtml :
@model MyModel
<form>
@Html.LabelFor(m=>m.Email)
@Html.TextBoxFor(m=>m.Email)
<br />
@Html.LabelFor(m=>m.Text)
@Html.TextBoxFor(m=>m.Text)
<br/>
<input type="submit" value="submit" />
</form>
returns 局部视图
的操作public PartialViewResult GetView(){
return PartialView("_MyForm", new MyModel());
}
我通过 ajax
调用该视图$.ajax({
url: "/Home/GetView",
dataType: "html",
success: function(html) {
$("#aDiv").html(html);
$("#aDiv :submit").on("click", function (){
$(this).closest("form").validate({
submitHandler: function (){ alert('valid'); }
});
});
}
});
问题是我没有填写电子邮件字段,而是显示警告对话框,使电子邮件(必填)字段带有红色边框。
如果我不使用 ajax 调用该视图,并且我在视图中使用 Html.RenderPartial('_MyForm', new MyModel())
那么它就可以工作。
换句话说,如果部分视图正常呈现(通过调用 RenderPartial
),则验证有效,如果通过 ajax 呈现,则验证无效。
为什么?我没有错误,我从 success
函数中记录了 html
参数,似乎没问题。
这很常见,当视图正常加载时,输入会在 dom 绑定验证器时出现。
当您通过 ajax 加载时,它们不是,因此它们不参与验证周期。
您可以通过在 ajax 成功处理程序中调用此代码让他们参与进来
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
这会将控件添加到验证周期