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

时间:2010-01-26 22:04:55

标签: c# asp.net asp.net-mvc modelstate

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

ModelState.AddErrorMessage("Fool!");

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

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

3 个答案:

答案 0 :(得分:23)

我会在我想要在控制器中显示的消息填充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>
<% } %>

答案 1 :(得分: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);
}

在你看来......

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

编辑:鉴于您的更新问题,我认为您正在考虑采取错误的方法。我会同意其他答案并按照PRG pattern进行操作。这比尝试添加假错误更有意义。

答案 2 :(得分:0)

在验证所有验证并且一切正常后,您应该实施类似POST / Redirect / GET模式的内容,并在操作方法结束时“重定向”到另一个视图。您可以将整个对象实例传递到目标视图,也可以只传递纯文本消息,也可以从web.config或资源文件中提取目标视图中的文本。

例如,我在共享文件夹中有一个名为“ChangeSuccess.aspx”的视图,我将重定向到该视图以进行所有成功编辑和创建。

你像这样“重定向”

return View("ChangeSuccess", objectInstance);

(注意:实际上没有重定向,请参阅评论)