2014-06-26 73 views
1

我正在研究一个功能,我们的站点能够加载另一个mvc站点。 基本上我使用Id = aquaVetIframe的iframe,我把我的mvc站点的URL(iframe的src属性的设置是从代码隐藏完成的)。一切工作正常在铬。但是现在使用IE 10测试它,我在IE中看到的唯一东西就是登录页面。 用户登录后,页面返回到相同的登录页面。我可以假设这与缓存有关,但我不是100%确定的。asp net mvc登录页面在iframe中不起作用

这里的一些代码: 我的aspx容器:背后

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server"> 
<meta http-equiv="Cache-Control" content="max-age=0" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="-1" /> 
<style type="text/css"> 
    html, body{height: 100%;} 
</style> 
</asp:Content> 

<asp:Content ID="Content5" ContentPlaceHolderID="MainContent" runat="server"> 
    <div style="height: 100%; width: 100%;"> 
     <iframe id="aquaVetIframe" runat="server" allowfullscreen="true" style="position: absolute;height: 100%; width: 100%;border:0px"> </iframe> 
    </div> 
</asp:Content> 

代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Dim urlQueryString = Request.QueryString("urlId") 

    aquaVetIframe.Attributes("src") = urlQueryString 

End Sub 

在我的网页我尝试添加下一个标签的顶部,但没有运气:

<meta http-equiv="Cache-Control" content="max-age=0" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="-1" /> 

这里使用IE10和Chrome浏览器(当前是浏览器工作我的应用程序) http://postimg.org/image/iaifcljdz/ enter image description here UPDATE: 添加此行我的MVC应用程序,cookie是从IE允许和应用程序运行正常,而我直接运行在浏览器中的网页(右键点击在IE浏览器中运行VS2013)

context.BeginRequest += (sender, args) => HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""); 

的问题是什么我现在是,当我运行从一开始我的应用我的MVC aplication没有执行。对于一些奇怪的原因,从MVC应用程序的JS库不加载.. 看屏幕截图 error comming from mvc app

回答

1

三两件事:

1)的iframe加载完整的html页面。所以我建议你在你加载到iframe中的页面(登录页面)内导入jquery库。

2)测试本地主机服务器时,IE是一个很好的问题来源。它有时会强制与Intranet(包括本地主机)页面上的IE8甚至IE7兼容。确保您已启用IE10 +模式。 This question向您展示如何做到这一点:

您可以通过添加以下代码到您的网页

<head> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
</head> 

实现它,或者您也可以添加以下代码在你的web.config中,system.webserver内标签(创建它,如果它不存在):

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="X-UA-Compatible" value="IE=Edge" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

3)当你没有显示你的标签,包括JS文件,那么这是一个好主意,看看他们(包括jQuery的那些)。确保:

  • 您正在打开和关闭<script></script>标记正确。包含JS文件时不要使用简写形式<script />,因为它不起作用;
  • 确保您使用的是正确的路径。使用相对路径(如〜/ scripts/jquery.js)由于'〜'而不起作用。如果您使用的是您的网站根目录的子文件夹,例如http://localhost/mysite/,您也可以发现一些问题。在这种情况下,你的包含应该包含文件夹/ mysite或使用相对路径(如scripts/jquery.js,../scritps/jquery.js等)。

也许这是不够的,但它是第一个需要的步骤来接近有效的代码。

+0

嗨,我可以看到我的问题是与点数2,我试着按照链接显示,但解决方案不适合我:) ..我会继续与此工作,我会更新我的问题 – Rolando

+1

问题发生在容器应用程序的父页面之一中.... ...坏事是我无法改变它.. – Rolando

1

转到IE> interntet选项>安全>自定义级别>向下滚动杂项>查找“在IFRAME中加载程序和文件”>在第一次看能

0

请求中没有变化的连续ajax调用通常被认为是由某些浏览器缓存的,并且此问题在IE 10中特别重现。请求的响应为HTTP 304 Not Modified,请求不会触及数据库。该解决方案是使用ajaxSetup缓存设置为false,如:

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
}); 

注意:这将缓存设置为false会话中的所有Ajax调用。

OR

使用高速缓存:尤其是Ajax调用假的,如果你不希望禁用缓存所有的Ajax调用。

$.ajax({ 
     ... 
     cache: false, 
     ... 
     }); 

对于非Ajax调用,您可以使用:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(0)); 

,以应对因涉嫌缓存调用。

此外,它可能看起来很奇怪,但我也面临类似的问题在IE中,但这是由于cookie。不知怎的,有两个不同的饼干创建相同的名称&,因此存储在cookie中的值没有找到,因此用户被卡在登录页面。检查是否COOKIE也不是你的案件的罪魁祸首。