我目前工作的数据列表,我需要在代表一个列表,并显示每个项目可以执行相应的动作视图来显示,比如编辑或删除它们。 对于版本是没有问题的concedering,这是一个特定视图。 我的问题是,当我想删除一个项目,我在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();
}
这种解决方案的一点是,URL不再是一样的第一个:... /名单,这是... /立即删除,我不觉得这是解决大,另一个解决办法是重定向到行动,现在的网址是好的,但在viewBag错误信息将不再可见,你们是否有一些更好的主意。
您可以使用TempData
跨一个用户请求中保留的信息和它意味着这个确切的使用情况。 而不是使用ViewBag
使用TempData["Error"] = "";
代替。 然后,在接收端你会有类似下面的代码片段:
[HttpGet]
public ActionResult List() {
ViewBag.Error = TempData["Error"];
// ...
return View();
}
参见ASP.NET TempData的请求之间仍然存在并且当使用ViewBag,ViewData的,或TempData的在ASP.Net MVC 3 。
如果你正在做一个重定向,请尝试使用TempData
,而不是ViewBag
。 TempData的是,保留用户的会话密钥/值到下一个页面请求的字典。 在你的控制器:
TempData["Error"] = "A message goes here";
在您重定向到你的列表视图:
@TempData["Error"]
或者,如果你不使用剃刀:
<%= TempData["Error"] %>
使用ViewBag
为POST ActionResult
:
ActionResult SubmitUser()
{
ViewBag.Msg =TempData["Msg"];
return view();
}
[HtttpPost]
ActionResult SubmitUser()
{
TempData["Msg"] ="Submitted Successfully"];
return view();
}