2016-08-12 77 views
0

我在我的控制器以下操作: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">&times; </button> 
     @Html.ValidationSummary(false, message) 
    </div> 
} 

這將調用在我所有的觀點如下頂部:

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

'我有一種感覺,那是因爲我再次發佈到服務器上了 - - 不,那是因爲你*不是*再次發佈到服務器。 – GSerg

+2

'location.reload'刷新頁面(它會再次調用GET方法,一切都會丟失) –

+1

既然你想重定向到'/ TreatmentOutcomeReport/Report',那麼沒有必要做一個Ajax調用。只需在POST方法中進行正常的提交和重定向(或者在ModelState無效的情況下返回視圖) –

回答

-1

如果你希望你的ModelState錯誤顯示在頁面上,那麼你應該

return View(yourViewModel); 

編碼時的觀點,一定要包括的助手,以顯示您的驗證:

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

我假設你的handle方法把錯誤放在ModelState中(就像它是這樣的)。

+1

我知道我可以做返回查看,如果在這種情況下可以做到這一點,我不會有這個問題。我怎樣才能得到像jquery一樣的行爲,就像VIew會做的一樣? –

+0

好的,那麼你需要在JON結果中返回你的錯誤,你的Java腳本將負責渲染它。重新加載頁面會讓你失去驗證信息。 –