对于错误消息,验证错误等
ModelState.AddErrorMessage("Fool!");
但是,你把成功的回答放在哪里,比如“你成功地向你的前任转移了很多钱”。 +“你的余额现在为零”。我仍然希望在控制器级别设置它,最好是以键值方式设置它,就像错误消息一样,但不会使模型状态失效。
这通常是怎么做的? ViewData的?
答案 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);
(注意:实际上没有重定向,请参阅评论)