C# MVC3重定向post方法中的操作和ViewBag抑制
我目前正在处理一个数据列表,我需要在一个视图中显示该列表,该视图表示一个列表,并为每个项目显示可以执行的相应操作,如编辑或删除它们。对于这个版本来说,承认这是一个特殊的观点是没有问题的。我的问题是,当我想删除一个项目时,我在post方法中有两个选择C# MVC3重定向post方法中的操作和ViewBag抑制,c#,asp.net-mvc-3,viewbag,C#,Asp.net Mvc 3,Viewbag,我目前正在处理一个数据列表,我需要在一个视图中显示该列表,该视图表示一个列表,并为每个项目显示可以执行的相应操作,如编辑或删除它们。对于这个版本来说,承认这是一个特殊的观点是没有问题的。我的问题是,当我想删除一个项目时,我在post方法中有两个选择 //Call directly the list [HttpPost] [Authorize] public ActionResult Delete(int itemId) { // logic to delete an ite
//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不再与第一个相同:…/List,现在是…/Delete,我觉得这个解决方案不太好,另一个解决方案是重定向到操作,现在url是好的,但是viewBag中的错误消息不再可见,你们有更好的主意吗 如果要执行重定向,请尝试使用
TempData
而不是ViewBag
。TempData是一个字典,它在用户会话中保留键/值,直到下一页请求。在控制器中:
TempData["Error"] = "A message goes here";
在您要重定向到的列表视图中:
@TempData["Error"]
或者,如果您没有使用剃须刀:
<%= TempData["Error"] %>
您可以使用
TempData
在一个请求中持久化信息,这正是针对这个用例的。不要使用ViewBag
使用TempData[“Error”]=”代码>取而代之。然后,在接收端会出现如下代码段:
[HttpGet]
public ActionResult List() {
ViewBag.Error = TempData["Error"];
// ...
return View();
}
请参见和。使用ViewBag
发布操作结果
:
ActionResult SubmitUser()
{
ViewBag.Msg =TempData["Msg"];
return view();
}
[HtttpPost]
ActionResult SubmitUser()
{
TempData["Msg"] ="Submitted Successfully"];
return view();
}
很好的建议是在控制器中设置ViewBag.Error=TempData[“Error”],这样视图就不必关心这个细节。是的,我以前在视图中也有它,但是我在视图中有很多逻辑来处理要查看的变量。我使用控制器获取所有必要的信息并将其传递给视图。非常感谢Joshua的回答,它工作正常,也感谢阅读资源。