我的ASP.NET MVC应用程序的母版页有两个IFRAME。
1)顶部的水平IFRAME显示应用程序徽标,退出链接等
2)顶栏下面的其余屏幕区域被第二个IFRAME占用,其中加载了所有视图。
身份验证超时后,ASP.NET会自动将用户重定向到登录页面。但是,由于视图在下面的IFRAME中运行,超时后,当ASP.NET将用户重定向到登录页面时,登录页面现在出现在下面的IFRAME中,顶部的IFRAME仍然显示用户仍然显示已登录。
我希望当用户被重定向到身份验证cookie超时的登录页面时,登录页面必须在浏览器的主窗口中显示没有任何IFRAME。
我该怎么做?
我怀疑我需要覆盖由Microsoft编写的负责此默认行为的一些HttpModule实现。是吗?
答案 0 :(得分:2)
没有办法Redirect
指示浏览器重定向到新页面。重定向将始终发生在iframe
。
您可以更改“超时”页面:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Timeout" timeout="1" />
</authentication>
</system.web>
</configuration>
然后在超时页面中,您需要有这样的链接:
<a href="" onclick="window.top.location.href='/Account/LogOn'">Login Again</a>
参考文献:
Redirect the parent page from IFrame
How to redirect to logon page when session State time out is completed in asp.net mvc
注意:您可以通过不使用IFRAM来避免这种情况。他们通常不赞成,您可以改为使用包含所有共享标头HTML的共享视图。
答案 1 :(得分:0)
我想我找到了我想要的东西。我认为我必须在HttpApplication
课程中或通过HttpModule
处理某些事件,我是对的。
请求在HttpApplication
类'Authenticate
事件中由ASP.NET验证。
如果我为此提供处理程序,我可以覆盖默认逻辑并执行我想要的任何操作。
就我而言,我会创建一个设置top.href = "~/Login/Index"
的JavaScript。然后,我会将此脚本写入响应缓冲区,然后刷新缓冲区,以便不会在其上写入任何内容。