Сообщения об успешности в отличие от сообщений об ошибках состояния модели

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

ModelState.AddErrorMessage("Fool!");

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

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

Ответ 1

Я бы заполнил 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>
<% } %>

Ответ 2

Я предполагаю, что вы можете проверить модельное состояние и установить переменную в своей модели...

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>
<% } %>

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

Ответ 3

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

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

Вы "перенаправляете", как этот

return View("ChangeSuccess", objectInstance);

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