0

我正在使用 ASP.net MVC 2.0 开发一个站点。有一个页面序列应该表现得像一个简单的向导,没有返回。数据应该在页面之间共享。我想只允许从当前页面重定向到向导的下一页。当前页面的视图模型应该被传递到将用于实现一些逻辑的下一页。任何用户都不应访问直接在浏览器中键入 URL 的中间页面之一。

我尝试使用带有指定键的 TempData 来保存当前页面的模型视图,并将其传递到下一个页面并检查它是否为 NULL 以呈现页面。如果 TempData 中模型视图的值为 NULL,则意味着用户重定向到此页面而不是从前一个页面。但是在某些情况下,用户可以重定向到向导的下一页,然后从站点的其他地方离开(例如,转到 FAQ 页面)。在此之后,用户可以键入已离开的向导页面的直接链接,该页面将被显示,但从逻辑上讲,它应该被重定向到错误页面。

问题:我怎样才能允许仅从前一个页面重定向到向导的某个页面,而不再重定向?

4

3 回答 3

0

您可以将您的操作方法限制为 HttpPost:

[HttpPost]
public ActionResult SecondPageAction(SomeType dataFromFirstPage)
{
     ....
}
于 2012-09-03T21:49:52.000 回答
0

我不完全明白。我想你想限制引用网址?如果是这样,那么你可以这样做:

// Action code

if(Request.UrlReferrer != "Valid url")
{
  return View("Error");
}
else
{
  // render the next page of your wizard
}

您所需要的只是一些逻辑来确定每个阶段的有效 url referrer 是什么。

考虑使用 Session 来存储您的数据。

于 2012-09-03T19:14:13.200 回答
0

我想我会将页面值存储在会话变量中。在每个页面的控制器上检查会话变量以查看前面的步骤是否已被访问。如果不是,则将 RedirectToAction 返回到上一步。

每一步结束,验证成功后,设置会话变量显示已经完成,然后重定向到下一步。

您也可以使用会话在页面之间共享数据,尽管我知道一些开发人员对此感到畏缩......但我不太确定为什么......我喜欢会话。

于 2012-09-03T19:45:07.750 回答