Javascript MVC 3客户端验证在POST后停止工作
我在从MSAjax MVC 3 Razor视图生成的表单上使用了jQueryAjax帖子 在这种形式下,客户端验证在键入过程中正常工作,但当用户生成“帖子”并单击“搜索”按钮时,客户端验证将停止运行 这就是模型:Javascript MVC 3客户端验证在POST后停止工作,javascript,asp.net-mvc-3,jquery,client-side-validation,Javascript,Asp.net Mvc 3,Jquery,Client Side Validation,我在从MSAjax MVC 3 Razor视图生成的表单上使用了jQueryAjax帖子 在这种形式下,客户端验证在键入过程中正常工作,但当用户生成“帖子”并单击“搜索”按钮时,客户端验证将停止运行 这就是模型: public class AnagraficaSearchViewModel : ViewModelBase { [Required] [StringLength(2)] public virtual string Ricerca
public class AnagraficaSearchViewModel : ViewModelBase
{
[Required]
[StringLength(2)]
public virtual string Ricerca { get; set; }
}
这是控制器:
[HttpPost]
public ActionResult Index(AnagraficaSearchViewModel model)
{
if (model.Ricerca == "12")
{
model.Status = Status.Error;
model.Message = "Errore!";
ModelState.AddModelError("", Cult.Testo(Cult.CultTextsIDs.StatusError));
}
if (Request.IsAjaxRequest()) return PartialView("SearchCriteria", model);
return View(model);
}
这是主要观点:
<div id="search-anagrafica-criteria">
@{ Html.RenderPartial("SearchCriteria", Model); }
</div>
@{Html.RenderPartial(“SearchCriteria”,Model);}
这是SearchCriteria视图:
@model AnagraficaSearchViewModel
<script type="text/javascript">
function CheckRow() {
$("form").valid();
abs.message.convertErrorsToTooltips();
};
function InitSearch() {
$("#Ricerca").bind("propertychange keyup input paste", function () {
setTimeout("CheckRow();", 100);
});
CheckRow();
$("#Ricerca").focus();
}
$(function () {
$('form').submit(function (e) {
e.preventDefault();
var $form = $(this);
if (!$form.valid()) {
abs.message.convertErrorsToTooltips();
return false;
}
$.validator.unobtrusive.parse($('form')); //added
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
$('#search-anagrafica-criteria').html(result);
InitSearch();
},
complete: function (result) {
CheckRow();
}
});
}
return false;
});
InitSearch();
});
</script>
@using (Ajax.BeginForm("Index", "Anagrafica", null, new AjaxOptions { UpdateTargetId = "search-anagrafica-criteria", HttpMethod = "POST", OnComplete = "CheckRow()" }))
{
@Html.LabelFor(el => el.Ricerca)
@Html.TextBoxFor(el => el.Ricerca)
@Html.ValidationMessageFor(el => el.Ricerca)
<button class="btn btn-primary" type="submit" style="margin-left: 10px">Search</button>
@Html.ValidationSummary(true)
}
@model AnagraficaSearchViewModel
函数CheckRow(){
$(“表格”).valid();
abs.message.convertErrorsToTooltips();
};
函数InitSearch(){
$(“#Ricerca”).bind(“propertychange键控输入粘贴”,函数(){
setTimeout(“CheckRow();”,100);
});
CheckRow();
$(“#Ricerca”).focus();
}
$(函数(){
$('form')。提交(函数(e){
e、 预防默认值();
var$form=$(此);
if(!$form.valid()){
abs.message.convertErrorsToTooltips();
返回false;
}
$.validator.unobtrusive.parse($('form');//已添加
if($(this).valid()){
$.ajax({
url:this.action,
类型:this.method,
数据:$(this).serialize(),
成功:功能(结果){
$(“#搜索anagrafica条件”).html(结果);
InitSearch();
},
完成:功能(结果){
CheckRow();
}
});
}
返回false;
});
InitSearch();
});
@使用(Ajax.BeginForm(“Index”,“Anagrafica”,null,新的AjaxOptions{UpdateTargetId=“搜索Anagrafica条件”,HttpMethod=“POST”,OnComplete=“CheckRow()”}))
{
@LabelFor(el=>el.Ricerca)
@Html.TextBoxFor(el=>el.Ricerca)
@Html.ValidationMessageFor(el=>el.Ricerca)
搜寻
@Html.ValidationSummary(true)
}
工作了好几个小时,什么也没变
谢谢你的帮助 改用以下方法:
$('form').removeData("validator");
$('form').removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse('form');
我使用了一种稍微“高级”的方式,而不仅仅是重新分析表单。 请参阅我的帖子:
是否尝试删除$.validator.unobtrusive.parse($('form'));从原始位置,并将其放置在所有视图代码之后。。。也就是说,在关闭AjaxForm parantesis…$之前添加以下代码。validator.unobtrusive.parse($('form');即使您移动了它的位置,如果您不首先删除数据元素,解析方法也不会重新绑定不引人注目的验证。您的建议并不能解决问题。并且你的代码在输入后添加一个。这是完美的表单!谢谢你,亚当!