成功消息而不是模型状态错误消息

Mar*_*tin 18 c# asp.net asp.net-mvc modelstate

对于错误消息,验证错误等

ModelState.AddErrorMessage("Fool!");
Run Code Online (Sandbox Code Playgroud)

但是,你在哪里提出成功回应,例如"你成功地向你的前任转移了很多钱".+"你的余额现在为零".我仍然希望在控制器级别设置它,最好是以键值方式设置它,就像错误消息一样,但不会使模型状态失效.

这通常是怎么做的?ViewData的?

Ros*_*ied 23

我会在我想要在控制器中显示的消息填充TempData ["success"](或者你想给它的键),然后适当地重定向(例如,如果我编辑用户,我重定向回用户列表) .这依赖于POST/Redirect/GET模式 - 无论如何这是一个很好的做法.

TempData["success"] = "Your Balance is now zero";
Run Code Online (Sandbox Code Playgroud)

在母版页中,我有一个部分检查该变量并在一个漂亮的样式div中显示该消息.像(可能不是100%正确)的东西:

<% if(TempData["success"] != null) { %>
      <div id="SuccessMessage"><%= Html.Encode(TempData["success"]) %><div>
<% } %>
Run Code Online (Sandbox Code Playgroud)


Dan*_*son 7

我想你可以查看模型状态并在模型中设置变量......

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);
}
Run Code Online (Sandbox Code Playgroud)

在你看来......

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

编辑:鉴于您更新的问题,我认为您正在考虑采取错误的方法.我会同意其他答案并遵循PRG模式.这比尝试添加假错误更有意义.