2

我的 ASP.NET MVC 应用程序的母版页有两个 IFRAME。

1) 顶部的水平 IFRAME,显示应用程序徽标、退出链接等。

2) 顶部栏下方的其余屏幕区域由第二个 IFRAME 占据,所有视图都在其中加载。

身份验证超时后,ASP.NET 会自动将用户重定向到登录页面。但是,由于视图在下面的 IFRAME 中运行,超时后,当 ASP.NET 将用户重定向到登录页面时,登录页面现在出现在下面的 IFRAME 中,顶部的 IFRAME 仍然出现,显示用户仍在登录。

我希望当用户在身份验证 cookie 超时时被重定向到登录页面时,登录页面必须在浏览器的主窗口中出现而没有任何 IFRAME。

我该怎么做呢?

我怀疑我需要重写一些由 Microsoft 编写的负责此默认行为的 HttpModule 实现。那正确吗?

4

2 回答 2

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>

参考:

从 IFrame 重定向父页面

如何在asp.net mvc中完成会话状态超时时重定向到登录页面

注意:您可以通过不使用 IFRAMES 来避免这种情况。它们通常不受欢迎,您可以改为使用包含所有共享标题 HTML 的共享视图。

于 2013-07-09T17:09:46.443 回答
0

我想我找到了我要找的东西。我假设我必须在HttpApplication课堂上或通过HttpModule.

碰巧该请求在HttpApplicationAuthenticate事件中由 ASP.NET 进行了身份验证。

如果我为此提供一个处理程序,我可以覆盖默认逻辑并在那里做任何我想做的事情。

就我而言,我会创建一个 javascript 来设置top.href = "~/Login/Index". 然后我会将此脚本写入响应缓冲区,然后刷新缓冲区,以便没有其他内容被写入其中。

于 2013-07-09T18:27:04.640 回答