отображение ошибок в представлении, когда действие имеет тип: RedirectToRouteResult - PullRequest
0 голосов
/ 03 августа 2011

Приведенный ниже код не отображает мои ошибки в представлении. Как я могу убедиться, что мои ошибки отображаются в представлении?

// Обратите внимание: я выкидываю исключение из правил, если где-то что-то идет не так, если я копирую ошибки в состояние модели

    [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 метод расширения:

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>

Я думаю, что состояние модели очищается, и при перенаправлении не остается ошибок ???

1 Ответ

0 голосов
/ 03 августа 2011

Да, перенаправление - это ответ браузеру, который говорит ему сделать новый запрос, поэтому любой контекст, который у вас есть, потерян.

Вы можете отобразить страницу с ошибкой, когда есть что отобразитьit:

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

Вам потребуется изменить тип возврата вашего метода действия на базовый класс AcionResult, чтобы возвращать различные виды результатов действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...