[ASP.NET]Infragistics 的 UltraWebGrid 在 IE11 上無法正常顯示問題

Infragistics 的 UltraWebGrid 在 IE11 上無法正常顯示問題

最近許多機器更新後Browser都升級到了 IE11,而我們公司原本使用的 UltraWebGrid.v11.1 在 IE11 下顯示卻不正常(使用相容性檢視是OK的)。

在IIS上設定相容性,也不會Apply到 IE11 上面(IE8~IE10是OK的)。

而在IE11上測試的過程中會有 'igtbl_getGridById' is undefined 的錯誤(是因為某些JS沒有下載下來)。

透過 HttpWtach 來錄瀏覽網頁的過程,可以發現使用相容性會多下載 ig_WebGrid.js、ig_WebGrid_cb.js、ig_WebGrid_an.js和ig_WebGrid_kb.js等 JS 檔案,如下,

image

 

猜想有可能是在偵測Browser的問題,但 Infragistics在 v11.2 之後就沒有 UltraWebGrid 了,所以找不到太多的資訊。

後來透過 .NET Reflector 看到它有個 Browser 的屬性,預設是 Auto ,於是把它改成 UpLevel ,就可以正常顯示了哦!

image

 

設定要顯示序號,在IE 11下沒有正常的顯示出來。


<igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server" 
	DisplayLayout-AllowRowNumberingDefault="Continuous" >
</igtbl:UltraWebGrid>

image

 

設定 Browser 屬性為 UpLevel 就可以正常顯示。


<igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server" 
DisplayLayout-AllowRowNumberingDefault="Continuous"
Browser="UpLevel" >
</igtbl:UltraWebGrid>

image

 

2014/01/10 補充使用 IE11OV.browser 設定,只適用ASP.NET 3.5

原本上面的作法是在Grid上加入設定 Browser 的設定為 UpLevel ,但需要每個Grid設定,太麻煩了。

如果是Asp.NET 3.5的話,就可以新增一個App_Browsers目錄,然後新增一個叫 IE11OV.browser 檔案,內容如下,


<browsers>
  <browser id="IE11OV" parentID="MozillaRV">
    <identification>
      <userAgent match="Trident" />
      <capability name="majorversion" match="11" />
    </identification>
    <capabilities>
      <capability name="browser" value="IE" />
    </capabilities>
  </browser>
</browsers>

這樣執行,Grid上沒有設定 Browser 屬性也可以正常哦!

參考自「Infragistics.WebUI.UltraWebGrid.ClickEventHandler problem in Internet Explorer IE11

image

 

因為ASP.NET 4.0針對Browser的設定跟.NET 2.0的不同,

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers
VS
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers

所以如果您的專案是使用.NET 4.0的話,會有「The browser or gateway element with ID 'MozillaRV' cannot be found.
」的錯誤訊息,如下,

image

2014/0114 補充說明 ASP.NET 4.0的解決方式,就是將 parentID="MozillaRV" 改成 parentID="InternetExplorer" ,如下為ASP.NET 4.0版本的browser檔內容, 


<browsers>
  <browser id="IE11OV" parentID="InternetExplorer">
    <identification>
      <userAgent match="Trident" />
      <capability name="majorversion" match="11" />
    </identification>
    <capabilities>
      <capability name="browser" value="IE" />
    </capabilities>
  </browser>
</browsers>

所以如果要相容以前的話,可以先將v4.0.30319\Config\Browsers中的檔案先備份出來,然後將v2.0.50727\CONFIG\Browsers中的檔案Copy過去。

並執行 C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regbrowsers.exe -i ,然後網站重新啟動,應該就可以順利執行。

image

 

目前就研究到這邊,如果各位先進有其他的方式,也請讓我知道。

之後如果有新的發現,再跟大家分享。

 

2014/01/14 補充目前同事 Jenny 的做法如下(感謝 Jenny 的分享) ,

如果使用 App_Browsers 的方式,發現在Tree的點選及一些頁面會有JavaScript的Error,

所以目前解法是在 <igtbl:UltraWebGrid 加入 Browser="UpLevel" 及在IIS HTTP回應標頭加上 X-UA-Compatible 的值IE=EmulateIE7 

 

參考資料

Infragistics.WebUI.UltraWebGrid.ClickEventHandler problem in Internet Explorer IE11

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^