控制控制器动作呼叫顺序

时间:2009-05-17 12:55:37

标签: asp.net-mvc

我正在敲响一个像web应用这样的向导,如果输入的项目已经存在,它将在表单中输入并有条件地重定向到确认页面。

的内容

“系统中已经有一个带有该名称的产品,您确定要继续吗?”。

我可以在我的控制器上执行“确认”操作,但此操作只能通过初始“添加”操作调用。

我的问题是,控制控制器动作调用顺序的最佳方法是什么。显然有人可以输入//确认网址并欺骗数据。

希望我有意义。

谢谢,

2 个答案:

答案 0 :(得分:3)

您希望用户有时确认一下,对吗?

如果是,请将表格提交给确认行动;然后

public ActionResult Confirm(MyObject mObj, string confirmButton )
{

   if( NotAlreadyExists(mObj) || confirmButton )
      return RedirectToAction("Create", mObj)
  else
  {
      ModelState.AddModelError("DuplicateProduct","Please confirm");
      ViewData["showConfirm"] = true;
      return View(mObj);
 }
}

事实上,你几乎不需要特殊的动作,因为你可以简单地放置你的datacontext创建代码而不是RedirectToAction,但无论如何......

然后视图需要查找showConfirm,并显示消息+确认按钮。

答案 1 :(得分:1)

您无法控制控制器动作呼叫顺序。

但是,您可以将此概念推广到您在应用程序中编码的内容。

我可以想出几种方法来确保访问者在另一个之前看到一步:会话状态,cookie,将一个令牌从一个动作传递到另一个动作,以及在asp.net mvc中的tempdata。

TempData将是最简单的,我敢打赌,如果你只是想打破这个功能。

让Add在重定向到Confirm之前在TempData中放置一个特殊值。如果Confirm在TempData中没有看到该值,则会重定向回Add。如果它在那里,确认正常业务。