流程获取和发布

时间:2013-01-17 20:36:17

标签: asp.net-mvc asp.net-mvc-4

我对ASP.NET MVC 4中的get和post过程有疑问。 我敢肯定经常谈论但是搜索这个主题并不容易。

让我试着解释一下:

我用标准方法启动我的控制器:

[HttpGet]
    public ActionResult Item()

因此,在此函数中,我检索了许多重要数据,例如用户ID等。 在我的情况下,我甚至在我的viewbag()中收集数据以决定是否必须显示表单。

现在,如果我发回帖子:

        [HttpPost]
    public ActionResult Item(FormCollection formCollection)

该函数返回标准View()。

现在的问题是,在post方法之后,没有调用GET方法的业务逻辑(检索用户ID等)...我试图用

来解决它
return this.RedirectToAction("Item");

但这真的是重复逻辑的开始(get)的解决方案吗?如何将post方法中的新值提供给get方法?

祝你好运, 帕特里克

1 个答案:

答案 0 :(得分:1)

该模式称为Post/Redirect/Get

要将其他数据传递给GET方法,您可以使用来自MvcContrib的TempData和ModelStateToTempDataAttribute - 如果返回Redirect,则将ModelState传递给tempdata,如果返回View,则将tempdata传递给modelstate。

[HttpGet]
[ModelStateToTempData]
public ActionResult Item(int id)
{
     // prepare view

     return View();
}

[HttpPost]
[ModelStateToTempData]
public ActionResult Item(FormCollection formCollection)
{
     // do some business logic
     int id = service.DoBusinessLogicAndReturnSomeId();

     return this.RedirectToAction("Item", new { id });
}

你应该避免在GET中拥有业务逻辑。所有业务逻辑都应该在POST方法中,并且在您调用之后,您可以重定向到准备视图的GET。