2016-08-12 5 views
0

I私のコントローラで、次のアクションがあります。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機能に呼ばれています以下の機能を持っています。

私REPONSEオブジェクトにエラーがある場合は、上から見ることができるように、私は私にModelStateエラーがまだ表示されるでしょうように、それを更新し、現在のページに滞在したいと思います。

私が直面している問題は、location.reloadと呼ぶと、私のModelStateエラーが私のページに表示されないということです。私はサーバーに再びポストしているので、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) 

私はあなたのハンドルメソッドがModelStateにエラーを置いていると仮定しています。

+1

私は私がこのケースでそれをすることが可能だった場合、私はこの問題を抱えていないだろう、私は戻って見ることができます知っている。 VIEWが返すものと同じように、jqueryで同じ動作をするにはどうすればよいですか? –

+0

さて、あなたはJONの結果でエラーを返す必要があり、あなたのJavaスクリプトはそれをレンダリングする責任があります。ページをリロードすると、検証情報が失われます。 –

関連する問題