0

我有一个关于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");

但这真的是从一开始就重复逻辑的解决方案吗?以及如何将新值从 post 方法提供给 get 方法?

最好的问候,帕特里克

4

1 回答 1

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。

于 2013-01-17T21:15:47.493 回答