Session过期我用OnActionExecuting做登陆跳转 但是页面是嵌套在iframe上的
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//判断管理员是否登录
if (IsAdminLogin(filterContext))
{
filterContext.Result = new JavaScriptResult { Script = "<script>parent.location.href='../../../AdminPager/Login/Login'</script>" };
}
}
直接在页面输出了字符串,这个怎么解决啊?我是准备执行javascript的
filterContext.Result = RedirectToRoute("Home", new { Controller = "Login", Action = "Index" });
直接这样做服务器端的重定向跳转,不要使用js在前端跳转
我用的是iframe 这样也可以么?
@奇民: 这个是在服务器端进行跳转,不是输出js到客户端,跟用不用iframe没有关系。
另外 JavaScriptResult 这个ActionResult,需要配合前端的js框架才能支持,并不是用 JavaScriptResult 返回的脚本就会直接被浏览器执行
@Sky.Grain: 青问一下,是不是在JavaScriptresult的返回值中,前端药使用ajax来接受这个返回值才能执行呢
@木木人啊哦: mvc 项目创建的时候会有一个 jquery.unobtrusive-ajax.min.js 文件。需要用这个配合才能使用。
可以看看这个 http://www.cnblogs.com/icyJ/p/JavaScriptResult.html
其实实现方式就是 JavaScriptResult 特殊处理的Response 的类型,然后配合前端的js 做单独的识别处理。
如果坚持想手写JS 跳转,可以 在服务器端返回一个url地址。 自己写的ajax拿到这个地址以后在做location.href
<script language="javascript"> if(top.location!==self.location){ WarningTxt1 = "content页面被iframe了!"; WarningTxt2 = "我们跳出iframe,直接访问content页面吧!"; alert(WarningTxt1); alert(WarningTxt2); top.location.href=self.location.href; } </script>
在iframe页面加上这段代码,地址自己修改一下,这样登录页面就不会出现子啊iframe框架里面了