18

对于错误消息、验证错误等,您有

ModelState.AddErrorMessage("Fool!");

但是,您将诸如“您成功地将很多钱转移给您的前任”之类的成功回复放在哪里。+“您的余额现在为零”。我仍然想在控制器级别设置它,最好以键值方式设置,与错误消息相同,但不会使模型状态无效。

这通常是怎么做的?查看数据?

4

3 回答 3

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>
<% } %>
于 2010-01-27T00:32:37.803 回答
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 模式。这绝对比尝试添加虚假错误更有意义。

于 2010-01-26T22:50:03.407 回答
0

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

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

你像这样“重定向”

return View("ChangeSuccess", objectInstance);

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

于 2010-01-27T00:04:02.960 回答