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">× </button>
@Html.ValidationSummary(false, message)
</div>
}
これは以下のようにすべての私のビューの上部に呼び出されます:
<div id="valSummary">
@Html.Partial("_ValidationSummaryDisplay", ViewData.ModelState)
</div>
「サーバーに再度ポストしているから気がする」 - いいえ、サーバーに再度ポストしていないからです。 – GSerg
'location.reload'はページをリフレッシュします(GETメソッドをもう一度呼び出すとすべてが失われます) –
'/TreatmentOutcomeReport/Report'にリダイレクトしたいので、ajax呼び出しを行う必要はありません。 POSTメソッドで通常のサブミットとリダイレクトを行います(または 'ModelState'が無効な場合はビューを返します)。 –