gpt4 book ai didi

asp.net-mvc - 如何防止直接调用操作方法?

转载 作者:行者123 更新时间:2023-12-04 04:27:33 26 4
gpt4 key购买 nike

我正在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");
}

最佳答案

Action 过滤器是必经之路

首先,这将在很大程度上取决于您临时保存的数据的存储系统。 Action 过滤器应检查此存储,并查看是否存在步骤1的数据。如果不是这样,您可以随时向ModelState添加错误,从而使其无效。因此,您的第2步代码如下所示:

[HttpGet]
[CheckExistingData]
public ActionResult Step2(Stuff s)
{
if (!this.ModelState.IsValid)
{
return RedirectToAction("Step1");
}
return View(s);
}

所以。您的过滤器应检查现有数据,并且可以:
  • 填写Stuff参数或
  • 添加模型状态错误并保持参数为空

  • 资料整合

    您编写重定向到操作(在第1步POST中)以仅提供一个复杂对象的方式并不是一种好的方法。您应该合并数据存储,因此无论您的用户进入第2步的哪个位置,过滤器都将始终起作用。在第1步POST中,您应该将数据保存到该特定存储中,然后重定向到第2步。

    您有两种情况可以进入第2步:
  • 从第1步开始
  • 保存数据后的任何地方

  • 这样,您的步骤2将在两种情况下均相同。您可以在向导中创建任意数量的步骤,并且相同的过程仍然可以相同地工作。

    关于asp.net-mvc - 如何防止直接调用操作方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3871641/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com