Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3重定向post方法中的操作和ViewBag抑制_C#_Asp.net Mvc 3_Viewbag - Fatal编程技术网

C# MVC3重定向post方法中的操作和ViewBag抑制

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

我目前正在处理一个数据列表,我需要在一个视图中显示该列表,该视图表示一个列表,并为每个项目显示可以执行的相应操作,如编辑或删除它们。对于这个版本来说,承认这是一个特殊的观点是没有问题的。我的问题是,当我想删除一个项目时,我在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不再与第一个相同:…/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的回答,它工作正常,也感谢阅读资源。