2012-08-29 12 views
7

本当に奇妙なものです。IE9でHTMLテーブルが正しく表示されない

私はそうのように、HTMLテーブルを作成するために、asp:Repeaterを使用しています:

マークアップ:

<asp:Repeater ID="myRpt" runat="server"> 
    <HeaderTemplate> 
     <table id="myGrd" border="0" style="cursor:pointer;width:100%; background-color:white;" cellpadding="2" cellspacing="0"> 
      <tbody> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr onclick="criteria.rowClicked(this);"> 
      <td style="border:solid 1px black;"> 
       <asp:Literal ID="lblName" runat="server"></asp:Literal> 
      </td> 
      <td style="border:solid 1px black;width:200px;"> 
       <asp:Literal ID="lblRange" runat="server"></asp:Literal> 
      </td> 

      <td style="display:none;" > 
       <asp:Literal ID="lblMisc" runat="server"></asp:Literal> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </tbody> </table> 
    </FooterTemplate> 
</asp:Repeater> 

VBは:

Public Sub populateGrid(ByVal ds As DataSet) 
     'ds is just made from a simple select query 
     myRpt.DataSource = ds 
     myRpt.DataBind() 
    End Sub 

Private Sub myRpt_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles myRpt.ItemDataBound 
     If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then 
      Dim lblName As Literal = e.Item.FindControl("lblName") 
      Dim lblRange As Literal = e.Item.FindControl("lblRange") 
      Dim lblMisc As Literal = e.Item.FindControl("lblMisc") 

      lblName.Text = "<font style='font-size:10pt; font-family:arial;'>" & Trim(e.Item.DataItem("Name")) & "</font>" 
      lblRange.Text = "<font style='font-size:10pt; font-family:arial;'>" & Trim(e.Item.DataItem("Range")) & "</font>" 
      lblMisc.Text = "<font style='font-size:10pt; font-family:arial;'>" & Trim(e.Item.DataItem("Miscellaneous")) & "</font>" 
     End If 
    End Sub 

これはFirefoxで罰金表示しますとクロム、そしてほとんどの時間IEで。しかし、大規模なテーブル(50以上の行)では、IEが奇妙に動作することがあります。 ...空白のセルを追加する

enter image description here

を表示されます...しかし、私は、開発者ツールを使用してチェックしましたHTML-には何もありません。間違った行は、セルテキストを除き、正しい行と同じマークアップを持ちます。さらに、間違った行を削除すると、上の行が正しく表示されなくなります。

地球上でなぜIEがこのようにレンダリングしているのか、そして私がそれをやめるために何ができるのかを誰かが示唆できますか?

+2

これはHTML/CSS/IEの問題で、ASPに関連していないようです。あなたはJSフィドルで問題を再現することができますか? (http://jsfiddle.net/) –

+0

私はjsfiddleにHTMLをコピーしました。不思議なことに、それはそこで大丈夫になるようです。 – Urbycoz

+0

ちょっと考えて - IEはQuirksモードでページをレンダリングしていますか?このページで開発者ツールを開くと、メニューバーの右側にブラウザモードとドキュメントモードが表示されますか? –

答えて

11

これは、大きなテーブルをレンダリングするIE9の既知のバグのようです。この問題は、テーブルの開始タグと終了タグの間の空白を削除するときに解決されました。 </td><td>

MSDN discussion on IE 9 rendering

+2

+1これはIE9のバグだと確信しています。 IE9のみがこの動作を示します。 – Icarus

+1

+1そのような頭痛ですが、そのようなシンプルな(しかし、奇妙な)ソリューションです。バウンスは授与されました - ありがとう! – Urbycoz

+0

@ Urbycozは、問題の解決策を提示する可能性があります。リンク「http://goo.gl/uhOSk」が壊れています –

3

これは既知のIE9の問題である、あなたのHTMLページのどこかに次のコードを置くことによってこの問題を解決することができます

$(function() { 
    var browser = $.browser; 
    if (browser.msie && browser.version.slice(0,3) == "9.0") { 
     $('table').each(function(index) { 
       var replace = $(this).html().replace(/td>\s+<td/g,'td><td'); 
       $(this).html(replace); 
     }); 
    } 
}); 
-2

私は、Clickイベントに拡張巨大なテーブルを持っていました発生した。 IE9でのみ発生し、IE8、IE10、Chromeなどですべて正常でした。

上記の解決方法は、私と同じ種類の他の回答には失敗しました。

私はそれをこのように解決:

私はテーブルに境界線を追加し、HTMLが正しくないことは明らかでした。いくつかのcolspanが欠落しているか、細胞には&nbsp;が必要だったのかもしれません。

また、テーブルborder=1の属性で、Click-expandingの問題が解消されました。

私はクラスxltableをテーブルに置き、.xltable td {border:0px solid white;}を私のCSSに入れました。

私のコードはまだ "有効"ではありませんが動作します。

+0

-1これはまったく異なる問題です。 – Urbycoz

関連する問題