想象一下用户可以更新,删除,编辑甚至投票的页面。由于每个操作都将由不同的ActionResult
处理,因此如果出现错误,则必须更改页面的网址。我的问题很简单:说你的页面是“http://localhost/Input/”,当你有一些错误时,我想重定向到“http://localhost/Input/Error”并显示错误信息。我不想为此使用会话,因此请不要告诉我这个link。基本上,我想要这样做是类似的事情:
public ActionResult Create(FormCollection form) {
try {
// some code here
return RedirectToAction("Index");
}
catch () {
string errorMessage = "You have done something bad!";
// and I want to pass this string to my Error Action.
return RedirectToAction("Error");
}
}
我使用的解决方案
我知道我说我不想使用TempData,但显然这是最好的选择,我已经将它用于我的问题。至于答案,我选择了DigBySwift的答案,因为如果您不想使用Session进行此类操作,那么这是最合乎逻辑的事情。
答案 0 :(得分:4)
正如您所说,如果您不想使用会话,那么TempData不是一个选项。理想情况下,您应该尝试不将错误消息传递到下一页。而是将错误消息存储在资源文件中。
您可以将id / enum传递给下一页,然后根据传递的参数检索错误:
return RedirectToAction("Error", new { ErrorId = 4 });
public ActionResult Error(int errorId){ ... }
编辑:另一种选择(因为数据库写入读取会很昂贵)会将消息写入cookie,然后在重定向后检索它,然后删除cookie。这不是很好,我个人不会用这个。但如果您需要自定义消息,则可以选择。
答案 1 :(得分:1)
是否可以选择从发件人页面将数据库中的错误消息保存到另一页? 我知道它与上面发布的类似,但它会更加动态,因为你不需要将消息放在资源文件中,你可以将错误消息保存在db中并在其他页面上获取
答案 2 :(得分:0)
我想建议另一种方式。我使用AJAX来执行这些类型的操作,因此我可以返回一个视图,或者主要是来自我的控制器的部分视图,而不是将用户重定向到另一个视图。因此,我可以使用ViewBag
在我的视图中使用该字符串消息。
public ActionResult Create(FormCollection form) {
try {
// some code here
return View('CreationSuccess');
}
catch () {
ViewBag.errorMessage = "You have done something bad!";
// and I want to pass this string to my Error Action.
return View('CrudError');
}
}