location.reload删除ModelState错误

时间:2016-08-12 11:46:57

标签: javascript jquery asp.net-mvc

我的控制器中有以下操作:

[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">&times;   </button>
        @Html.ValidationSummary(false, message)
    </div>
}

这将在我的所有观点的顶部调用,如下所示:

<div id="valSummary">
    @Html.Partial("_ValidationSummaryDisplay", ViewData.ModelState)
</div>

1 个答案:

答案 0 :(得分:-1)

如果您希望在页面上显示ModelState错误,那么您应该

return View(yourViewModel);

对视图进行编码时,请务必包含帮助程序以显示验证:

@Html.ValidationMessage(m => m.PropertyName)

我假设你的handle方法将错误放在ModelState中(因为它就是这样)。