我在从MSAjax MVC 3 Razor视图生成的表单上使用了jQuery ajax帖子。
在此表单中,客户端验证在键入期间正常工作,但当用户单击“搜索”按钮生成“POST”时,客户端验证将停止运行!!
这是模型:
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>
这是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)
}
许多小时的工作并没有改变!!
感谢您的帮助!
答案 0 :(得分:2)
请改用以下内容:
$('form').removeData("validator");
$('form').removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse('form');
答案 1 :(得分:1)
我使用的方法比仅仅重新分析表单更先进。 请参阅我的帖子:
ASP.Net MVC: Can you use Data Annotations / Validation with an AJAX / jQuery call?