Сообщения об успехе, а не сообщения об ошибках состояния модели - PullRequest
17 голосов
/ 27 января 2010

Для сообщений об ошибках, ошибок проверки и т. Д. У вас есть

ModelState.AddErrorMessage("Fool!");

Но куда вы положили успешные ответы типа «Вы успешно перевели много денег своему бывшему». + «Ваш баланс теперь равен нулю». Я все еще хочу установить его на уровне контроллера и предпочтительно в ключ-значение, так же, как сообщения об ошибках, но без аннулирования состояния модели.

Как это обычно делается? ViewData

Ответы [ 3 ]

23 голосов
/ 27 января 2010

Я бы заполнил TempData ["success"] (или какой-либо ключ, который вы хотите дать ему) сообщением, которое я хочу отобразить в контроллере, затем перенаправил бы соответствующим образом (например, если я редактирую пользователя, я перенаправляю обратно к список пользователей). Это зависит от паттерна POST / Redirect / GET, что в любом случае является хорошей практикой.

TempData["success"] = "Your Balance is now zero";

На главной странице у меня есть раздел, который проверяет эту переменную и отображает сообщение в удобном стиле div. Что-то вроде (может быть не на 100% правильно):

<% if(TempData["success"] != null) { %>
      <div id="SuccessMessage"><%= Html.Encode(TempData["success"]) %><div>
<% } %>
7 голосов
/ 27 января 2010

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

public ActionResult MyAction(MyEntity model)
{
  //Here would be some validation, which returns with ModelState errors

  //Now set the validity of the modelstate as the IsValid property in your entity
  model.IsValid = ModelState.IsValid;

  return View(model);
}

На ваш взгляд ...

<% if(Model.IsValid) { %>
  <p>You successfully transfered your balance to your ex.</p>
<% } %>

Редактировать: Учитывая ваш обновленный вопрос, я думаю, что вы смотрите на неправильный подход. Я согласился бы с другими ответами и следовал бы схеме PRG . Это определенно имеет больше смысла, чем попытка добавить ложную ошибку.

0 голосов
/ 27 января 2010

Вы должны реализовать что-то вроде шаблона POST / Redirect / GET и «перенаправить» в другое представление в конце ваших методов действия после того, как все проверки были проверены и все выполнено нормально. Вы можете передать весь экземпляр объекта в представление назначения, или просто передать текстовое сообщение, или вы можете извлечь текст в представлении назначения непосредственно из web.config или из файла ресурсов.

Например, у меня есть одно представление в общей папке с именем «ChangeSuccess.aspx», куда я перенаправляю для всех моих успешных изменений и созданий.

Вы "перенаправить", как это

return View("ChangeSuccess", objectInstance);

(примечание: фактически не перенаправляет, см. Комментарии)

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