我的控制器中有以下操作:
[HttpPost]
public JsonResult RedirectToAspReportViewer(MvcReportPeriodSelectionViewModel periodFilter, MvcMultipleLocationSelectionViewModel locationFilter)
{
var jsonObject = new { HasErrors = false, strUrl = "/ASPReports/TreatmentOutcome.aspx" };
if (ModelState.IsValid)
{
try
{
//some code
}
catch (ValidationException ex)
{
this.HandleValidationErrors(ex);
jsonObject = new { HasErrors = true, strUrl = "/TreatmentOutcomeReport/Report/" };
}
}
return Json(jsonObject);
}
然后,在我的Javascript中,我有以下函数,在我的ajax帖子的OnSuccess函数上调用它。
onSuccessCall: function (response) {
if (response.HasErrors === true) {
//window.location = window.location.href;
location.reload();
} else {
window.open(response.strUrl);
}
};
从上面可以看出,如果我的响应对象有错误,我想留在当前页面上,只需刷新它以便我的ModelState错误仍然显示。
我遇到的问题是,当我调用location.reload
时,我的ModelState错误不会显示在我的页面上。我有一种感觉,因为我再次发布到服务器,并且ModelState被清除。
我该如何避免这种情况?
更新 我不能只将验证错误添加到JsonResult,并在客户端更新必要的DOM以显示错误。在我的所有观点中,我有以下共享视图,它返回我的错误:下面是示例:
@model ModelStateDictionary
@{
var cls = "alert-danger";
var type = ViewBag.Type;
if (type != null && type.ToString().ToLower() == "warning")
{
cls = "alert-warning";
}
var message = "Please attend to the following problems:";
if (ViewBag.Message != null && ViewBag.Message.ToString().Trim() != "")
{
message = ViewBag.Message.ToString().Trim();
}
}
@if (ViewData.ModelState.Keys.Any(k => ViewData.ModelState[k].Errors.Count() > 0))
{
<div class="alert @cls">
<button class="close" data-dismiss="alert" aria-hidden="true">× </button>
@Html.ValidationSummary(false, message)
</div>
}
这将在我的所有观点的顶部调用,如下所示:
<div id="valSummary">
@Html.Partial("_ValidationSummaryDisplay", ViewData.ModelState)
</div>
答案 0 :(得分:-1)
如果您希望在页面上显示ModelState错误,那么您应该
return View(yourViewModel);
对视图进行编码时,请务必包含帮助程序以显示验证:
@Html.ValidationMessage(m => m.PropertyName)
我假设你的handle方法将错误放在ModelState中(因为它就是这样)。