Ofl*_*cet 12 c# viewbag asp.net-mvc-3
我目前正在处理一个数据列表,我需要在一个视图中显示一个列表,并为每个项目显示可以执行的相应操作,例如编辑或删除它们.对于该版本,可以毫无疑问地认为它是一种特殊的观点.我的问题是当我想删除一个项目时,我在post方法中有两个选择.
//Call directly the list
[HttpPost]
[Authorize]
public ActionResult Delete(int itemId)
{
// logic to delete an item
ViewBag.Error = ""; // The result of the execution
return List();
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案的问题是url不再与第一个相同:.../List,它是... /现在删除,我发现这个解决方案不太好,另一个解决方案是重定向到动作,现在url很好,但viewBag中的错误信息不再可见,你们有更好的主意吗?
Jos*_*hua 36
您可以使用TempData在一个请求中保留信息,这是针对这个确切的用例.而不是使用ViewBag使用TempData["Error"] = "";而不是.然后,在接收端,您将有一个如下所示的代码段:
[HttpGet]
public ActionResult List() {
ViewBag.Error = TempData["Error"];
// ...
return View();
}
Run Code Online (Sandbox Code Playgroud)
请参阅ASP.NET TempData在请求之间保持不变以及何时在ASP.Net MVC 3中使用ViewBag,ViewData或TempData.
Mik*_*ock 13
如果您正在进行重定向,请尝试使用TempData而不是ViewBag.TempData是一个字典,它保留用户会话中的键/值,直到下一页请求.在你的控制器中:
TempData["Error"] = "A message goes here";
Run Code Online (Sandbox Code Playgroud)
在列表视图中,您要重定向到:
@TempData["Error"]
Run Code Online (Sandbox Code Playgroud)
或者如果你不使用剃须刀:
<%= TempData["Error"] %>
Run Code Online (Sandbox Code Playgroud)