2011-08-03 8 views
0

以下のコードはビューにエラーを表示していません。ビューにエラーが表示されるようにするにはどうすればよいですか?私の見解ではアクションの種類がRedirectToRouteResultのときにエラーが表示される

public static void CopyTo(this RulesException ex, ModelStateDictionary modelstate) 
    { 
     CopyTo(ex,modelstate,null); 
    } 

    public static void CopyTo(this RulesException ex, ModelStateDictionary modelstate, string prefix) 
    { 
     prefix = string.IsNullOrEmpty(prefix) ? "" : prefix + "."; 
     foreach (var propertyerror in ex.Errors) 
     { 
      string key = ExpressionHelper.GetExpressionText(propertyerror.Property); 
      modelstate.AddModelError(prefix + key, propertyerror.Message); 
     } 
    } 

は//何かがうまくいかない場合、私はにModelStateに

[HttpPost] 
    public RedirectToRouteResult TaskDueDate(int id, int taskid) 
    { 

     var duedate = Request.Form["duedate"]; 
     var duetime = Request.Form["duetime"]; 

     try 
     { 
      var newduedate = DateHelper.GoodDate(duedate, duetime); 
      _service.SetTaskDueDate(id, taskid, newduedate); 

      this.FlashInfo("success, task due date has been updated..."); 
     } 
     catch (RulesException ex) 
     { 
      ex.CopyTo(ModelState); 
     } 

     return RedirectToAction("TaskDetail"); 
    } 

ex.CopyTo拡張メソッドをエラーをコピーもしそうなら、私は、どこかのルールの例外をスローします私は基本的には:

 <div id="Errors"> 
      <span id="ServerResponse"></span> 
      <%= Html.ValidationSummary(false, "")%> 
     </div> 

私はモデルの状態がクリアされ、リダイレクトにエラーが残っていないと思う???

答えて

0

はい、リダイレクトは、ブラウザに新しいリクエストを行うように指示するための応答です。したがって、所有しているコンテキストはすべて失われます。

それに表示するものがあるときは、エラーページを表示することができます:

if (ModelState.Count > 0) { 
    return View("ErrorPage"); 
} else { 
    return RedirectToAction("TaskDetail"); 
} 

あなたは、アクションの結果の種類を返すために、基本クラスAcionResultにあなたのアクションメソッドの戻り値の型を変更する必要があります。

+0

私はいつも同じページを表示することを好むとは思っていませんでした。問題は現在、データベースから多くのものが必要となるため、ビューを再構築する必要があります。ありがとう – Haroon

関連する問題