HTML表格在IE9中无法正确呈现

时间:2012-08-29 08:48:41

标签: asp.net vb.net internet-explorer-9 rendering html-table

非常奇怪,这个。

我正在使用asp:Repeater来创建HTML表格,如下所示:

标记:

<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和Chrome中显示正常,而在IE中大部分时间都显示。但是,有时对于较大的表(50多行),IE表现得很奇怪。它似乎添加了一个空白单元格......

enter image description here

...但HTML中没有任何内容 - 我使用开发人员工具进行了检查。不正确的行与正确的行具有相同的标记,但单元格文本除外。更重要的是,如果我删除了不正确的行,那么上面的那行开始显示错误。

请有人建议为什么地球上IE正在渲染它,以及我可以做些什么来阻止它。

3 个答案:

答案 0 :(得分:11)

这似乎是IE9渲染大型表时的一个已知错误。在删除表格def开始和结束标记之间的空白时,问题得到解决,例如。 </td><td>

MSDN discussion on IE 9 rendering

答案 1 :(得分: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 :(得分:-2)

我有一个巨大的表,当Click事件发生时会扩展。只在IE9中发生过,IE8,IE10,Chrome等都很好。

上述解决方案对我来说失败了,以及其他同类答案。

我这样解决了:

我在表格中添加了边框,很明显HTML不正确。一些colspan缺失或细胞需要&nbsp;或可能是任何东西。

我还注意到,现在,使用表border=1属性,Click-expanding的问题就消失了。

所以我把一个班级xltable放到桌子上,把.xltable td {border:0px solid white;}放在我的CSS中。

我的代码仍然没有&#34;有效&#34;但它的确有效。