0

以下のコードはビューにエラーを表示していません。エラーがビューに表示されるようにするにはどうすればよいですか?

//どこかで問題が発生した場合、ルールの例外をスローすることに注意してください。問題が発生した場合は、エラーを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");
    }

例:CopyTo拡張メソッド:

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);
        }
    }

私の見解では、私は基本的に次のことをしています。

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

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

4

1 に答える 1

0

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

表示するものがある場合、エラー ページを表示できます。

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

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

于 2011-08-03T10:45:30.040 に答える