我有一个视图,它使用不显眼的 ajax 来提交表单,或者只是普通的 jquery ajax 也可以解决问题。对于这两种实现,我可以让它很好地击中我的控制器并执行我的 ModelState.IsValid 验证,然后返回我的视图,如下所示:
public ActionResult SubmitForm(ViewModel viewModel)
{
if(!ModelState.IsValid)
{
return View("~/view path", viewModel);
}else
{
// do stuff
// I have to return this in order for me to get my model validation errors to show up
return Json(new { msg = "OK" });
}
}
看法:
<form asp-action="SubmitForm" asp-controller="Controller" data-ajax="true" data-ajax-method="POST"
data-ajax-success="onSubmitSuccess(data, 'formId')" id="formId">
@Html.ValidationSummary()
// some form fields with html tag helpers
</form>
现在,当我的 SubmitForm 操作返回我对失败模型验证的看法时,我的验证摘要永远不会出现。我让它工作的唯一方法是通过检查 json msg 属性,用我返回的数据替换我的整个表单 html,就像在我的 OnSubmitSuccess 函数中一样:
function onSubmitSuccess(data, form)
{
if(data.msg)
{
if(data.msg == "OK") { // do stuff }
}else
{
$("#" + form).html(data.responseText);
}
}
我基本上是用传入的响应文本替换我的表单 html,以便显示我的错误消息。为什么我不能只做一个返回部分或返回视图并在不修改 jquery 和替换 html 的情况下工作,有什么特别的原因吗?
谢谢