我一直在使用 asp.net mvc (但我还是个初学者)。由于 jquery 回发,我希望能够更新两个视图。
基本上我有一个列表和一个详细信息视图。详细信息视图使用 jquery 弹出窗口(使用 jquery-UI 弹出窗口)呈现。如果详细信息保存成功(即详细信息视图上没有验证错误),我只想更新列表。但是,如果详细信息视图中有任何验证错误,我想更新详细信息视图,以便用户看到验证错误。
所以我想在我的控制器中,我返回一个 JsonResult 而不是一个视图。
[HttpPost]
public ActionResult SavePersonInfo(Person p) {
if(ModelState.Valid) {
return View("PersonList");
}
return Json({Error = true, View = PartialView("PersonDetails", p)});
}
如您所见,如果没有错误,我会返回人员列表视图,但如果有任何验证错误,我会返回详细信息视图。我返回 JsonResult 的原因是我需要告诉我的视图有一个错误,以便视图(jquery)知道要更新哪个部分(例如是否更新人员列表“div”或弹出对话框“div” ')。
因此,在我看来,jquery 如下(请假设有一个用于输入人员详细信息的表单,并在单击“保存”按钮时调用“SubmitPersonForm();”函数):
<script type="text/javascript>
$('#btnSave').click(function (event) {
onBegin();
$.ajax(
{
type: "POST",
url: "/Person/Save",
data: $('form').serialize(),
success: function (result) {
if(result.Error) {
$('#dvDetails').html($(result).View));
}
else {
$('#dvPersonList').html($result);
}
}
});
});
</script>
所以我现在遇到的问题是,当出现验证错误时,我确实看到正确的“div”正在更新,但我丢失了 asp.net mvc 验证消息。我没有看到任何红色的验证错误,好像 ASP.NET MVC 完全忽略了它们。但是,我的 ModelState 确实有这些错误,只是没有显示在详细信息视图中。我的详细信息视图中确实有验证摘要和 Html.ValidationFor(m => ...) 语句。
有人可以告诉我为什么我没有看到验证错误吗?虽然我使用的是 JSonResult,但在渲染“dvDetails”时,我确实使用了正确的属性,这是一个有效的视图。我在做一些我不应该在 asp.net mvc 中做的事情吗?顺便说一句,我将 asp.net mvc2 RC 与 Visual Studio 2010 RC 一起使用。
谢谢你。