我对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方法?
祝你好运, 帕特里克
答案 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。