2012-09-03 114 views
0

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

我试着用TempData和一个指定的键来保存当前页面的模型视图,将它传递给下一个,并检查它是否为NULL或不显示页面。如果TempData中模型视图的值为NULL,则意味着用户不是从前一个页面重定向到此页面。但是,用户可以重定向到向导的下一页并从站点的其他地方出去(例如常见问题页面)。在此之后,用户可以键入已经离开的向导页面的直接链接,并且该页面将被显示,但是在逻辑上它应该被重定向到错误页面。

问题:我怎样才能允许重定向到一个向导的某个页面,只是从前一个和哪个地方更多?

回答

0

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

// Action code 

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

所有你需要的是一些逻辑来确定一个有效的URL引用是什么每个阶段。

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

0

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

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

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

0

您可以限制你的动作方法HttpPost:

[HttpPost] 
public ActionResult SecondPageAction(SomeType dataFromFirstPage) 
{ 
    .... 
}