我在我的控制器以下操作:location.reload刪除的ModelState錯誤
[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功能。
正如你可以看到從上面,如果我的效應初探對象有錯誤,我想留在當前頁面,只刷新它,這樣我的ModelState錯誤仍然顯示。
我面臨的問題是當我撥打location.reload
時,我的模型狀態錯誤不會顯示在我的頁面上。我感覺這是因爲我再次發佈到服務器,並且ModelState被清除。
我該如何避免這種情況?
UPDATE 我不能將驗證錯誤添加到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>
'我有一種感覺,那是因爲我再次發佈到服務器上了 - - 不,那是因爲你*不是*再次發佈到服務器。 – GSerg
'location.reload'刷新頁面(它會再次調用GET方法,一切都會丟失) –
既然你想重定向到'/ TreatmentOutcomeReport/Report',那麼沒有必要做一個Ajax調用。只需在POST方法中進行正常的提交和重定向(或者在ModelState無效的情況下返回視圖) –