我正在使用ASP.net MVC 2.0开发一个网站。有一系列页面应该像一个简单的向导而不返回。数据应该在页面之间共享。我想只允许从当前页面重定向到向导的下一页。应将当前页面的视图模型传递到下一页,该页面将用于实现某些逻辑。任何用户都不应该访问直接在浏览器中输入URL的中间页面之一。
我尝试使用带有指定键的TempData来保存当前页面的模型视图,将其传递给下一页并检查它是否为NULL以呈现页面。如果TempData中的模型视图的值为NULL,则表示用户重定向到此页面而不是前一页面。但有一种情况是,用户可以重定向到向导的下一页,并从站点上的其他位置出去(对于FAQ页面的实例)。在此之后,用户可以键入已经离开的向导页面的直接链接,并且将显示该页面,但在逻辑上它应该被重定向到错误页面。
问题:如何才允许仅从之前的页面重定向到某个向导页面,而不是更多?
答案 0 :(得分:0)
我不完全明白。我想你想限制引用网址?如果是这样,那么你可以这样做:
// Action code
if(Request.UrlReferrer != "Valid url")
{
return View("Error");
}
else
{
// render the next page of your wizard
}
您需要的只是一些逻辑来确定每个阶段的有效网址引用者。
考虑使用Session来存储您的数据。
答案 1 :(得分:0)
我想我会在会话变量中存储一个页面值。在每个页面的控制器上检查会话变量,以查看是否已访问过前面的步骤。如果没有,请将RedirectToAction返回到上一步。
在每个步骤结束时,验证成功后,设置会话变量以显示它已完成,然后重定向到下一步。
你也可以使用会话在页面之间共享数据,虽然我知道有些开发人员对此感到畏缩......但我不太清楚为什么......我喜欢会话。
答案 2 :(得分:0)
您可以将操作方法限制为HttpPost:
[HttpPost]
public ActionResult SecondPageAction(SomeType dataFromFirstPage)
{
....
}