我正在开发MVC2中的向导类型解决方案,我想阻止用户直接进入第2步,但是,我仍然希望它显示在URL中.
此外,由于可以随时保存进度,我仍然希望能够以编程方式转到Step2.我怎样才能做到这一点?
[HttpGet]
public ActionResult Step1() {
return View("Step1View");
}
[HttpPost]
public ActionResult Step1(Stuff s) {
return RedirectToAction("Step2", new { S = s });
}
[HttpGet] //<-- how do I stop users going directly here
public ActionResult Step2(Stuff s) {
return View();
}
[HttpPost]
public ActionResult Step2(Stuff2 s) {
return RedirectToAction("Step3");
}
Run Code Online (Sandbox Code Playgroud)
首先,这在很大程度上取决于临时保存数据的存储系统。操作过滤器应检查此存储并查看步骤 1 数据是否存在。如果没有,您可以随时添加错误以ModelState使其无效。因此,您的第 2 步代码将如下所示:
[HttpGet]
[CheckExistingData]
public ActionResult Step2(Stuff s)
{
if (!this.ModelState.IsValid)
{
return RedirectToAction("Step1");
}
return View(s);
}
Run Code Online (Sandbox Code Playgroud)
所以。您的过滤器应检查现有数据,并且:
Stuff参数或您编写重定向到操作(在步骤 1 POST 中)以仅提供复杂对象的方式并不是一个好方法。您应该整合数据存储,因此无论您的用户在哪里执行第 2 步,过滤器都将始终以相同的方式工作。在步骤 1 POST 中,您应该将数据保存到此特定存储,然后重定向到步骤 2。
进入步骤 2 的情况有两种:
这样,您的步骤 2 对于这两种情况都是相同的。您可以在向导中创建任意数量的步骤,并且相同的过程仍然会以相同的方式工作。
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |