我正在敲响一个像web应用这样的向导,如果输入的项目已经存在,它将在表单中输入并有条件地重定向到确认页面。
的内容“系统中已经有一个带有该名称的产品,您确定要继续吗?”。
我可以在我的控制器上执行“确认”操作,但此操作只能通过初始“添加”操作调用。
我的问题是,控制控制器动作调用顺序的最佳方法是什么。显然有人可以输入//确认网址并欺骗数据。
希望我有意义。
谢谢,
答案 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。如果它在那里,确认正常业务。