在后方法和ViewBag抑制MVC3 RedirectToAction(MVC3 RedirectT

2019-06-23 13:41发布

我目前工作的数据列表,我需要在代表一个列表,并显示每个项目可以执行相应的动作视图来显示,比如编辑或删除它们。 对于版本是没有问题的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错误信息将不再可见,你们是否有一些更好的主意。

Answer 1:

您可以使用TempData跨一个用户请求中保留的信息和它意味着这个确切的使用情况。 而不是使用ViewBag使用TempData["Error"] = ""; 代替。 然后,在接收端你会有类似下面的代码片段:

[HttpGet]
public ActionResult List() {
    ViewBag.Error = TempData["Error"];
    // ...
    return View();
}

参见ASP.NET TempData的请求之间仍然存在并且当使用ViewBag,ViewData的,或TempData的在ASP.Net MVC 3 。



Answer 2:

如果你正在做一个重定向,请尝试使用TempData ,而不是ViewBag 。 TempData的是,保留用户的会话密钥/值到下一个页面请求的字典。 在你的控制器:

TempData["Error"] = "A message goes here";

在您重定向到你的列表视图:

@TempData["Error"]

或者,如果你不使用剃刀:

<%= TempData["Error"] %>


Answer 3:

使用ViewBag为POST ActionResult

ActionResult SubmitUser()
{
    ViewBag.Msg =TempData["Msg"];

    return view();
}

[HtttpPost]
ActionResult SubmitUser()
{
    TempData["Msg"] ="Submitted Successfully"];

    return view();
}


文章来源: MVC3 RedirectToAction in a post method and ViewBag suppression