我在MVC3 webapp中使用成员身份验证。我大量使用jQuery并在div和tabs中加载局部视图。我的问题是当用户处于非活动状态并且已注销然后他尝试在控制器内部调用Action时,该控件会在div或tab中加载局部视图,整个带有LogOn视图的页面被加载到div中,破坏了我的布局。
重定向正确完成,并且是所需的效果,但是我想在窗口上加载LogOn页面,而不是在当前视图中的div上加载。有谁知道如何做到这一点?
我明白我想要什么,有什么不对吗?
谢谢。
答案 0 :(得分:0)
经过身份验证的调用和Ajax的组合始终是一个问题,因为Ajax无法正确处理重定向。
我不喜欢Ajax调用的控制器操作的Authorize属性,而是检查在方法内部进行身份验证的用户并返回特定的HTTP响应(例如HTTP403 Unauthorized)。在客户端脚本中使用错误处理程序,您可以通过设置window.location来测试此响应并重定向到登录页面。
答案 1 :(得分:0)
用一个小脚本解决了我的问题。它不是最好的解决方案,我对它不是很满意,但至少它以一种非常简单的方式解决了我的问题。
如果有人感兴趣,这就是我所做的,我在登录页面的开头添加了这段代码:
<script type="text/javascript">
function funcName() {
var str = window.location.href;
var num = loc.indexOf('@Url.Action("Action", "Controller", new { area = "" })');
if (num < 0) {
window.location = '@Url.Action("Action", "Controller", new { area = "" })';
}
}
relocate();
</script>
这样,如果登录页面加载到某个div而不是窗口,它会重新定位到实际的登录页面。