GridView生成的代码将“width ='100%'”添加到它创建的表中

时间:2010-11-01 20:29:57

标签: c# asp.net gridview ajaxcontroltoolkit

我的页面在Firefox和IE8中看起来正确。但是在IE7中,嵌套的gridview溢出到相邻的单元格中,就像问题here一样。

在开发人员工具中查看它,有一个与ASP.NET生成的表关联的内联样式,并且它的width属性为100%。如果我删除它,嵌套表会弹回它所属的位置。

问题是,没有一个内联式的设置。实际上,如果我尝试设置width='250px',它会被width='100%'覆盖。如果我尝试删除代码隐藏中的width属性,attrGridView.Attributes["Width"]为null,并且调用.Remove()不执行任何操作。但是每个asp.net生成的gridview-table都有一个内嵌样式,其上设置了width='100%'(它只会在一个地方引起我的问​​题)。

根据我链接的文章中的建议设置table-layout='fixed'没有帮助。

如何让ASP.NET停止设置此属性?


一些代码:

<asp:TemplateField HeaderText="Attributes" SortExpression="Attributes">
  <HeaderStyle CssClass="GridHeaderCell" />
  <ItemStyle CssClass="GridTableCell AttrGridCellPadding" />
  <ItemTemplate>

    <asp:GridView id="attributesGridView" runat="server"
         AutoGenerateColumns="false" ShowHeader="false" GridLines="None" 
         AlternatingRowStyle-BackColor="White" CssClass="StupidGridView" > 

      <EmptyDataTemplate>
        <p class="italic">There are no attributes for this request.</p>
      </EmptyDataTemplate>

      <Columns>
        <asp:TemplateField>
          <ItemStyle CssClass="AttrTableCell" />
          <ItemTemplate>
            <asp:Label id="attributeName" runat="server" 
                 Text='<%# Eval("Name") + ":&nbsp;&nbsp; "+ Eval("Value") %>'
                 CssClass="AttrGridCell"></asp:Label>
          </ItemTemplate>
        </asp:TemplateField>
      </Columns>

    </asp:GridView>
  </ItemTemplate>
</asp:TemplateField>


.StupidGridView {
  width:  250px;
}

2 个答案:

答案 0 :(得分:2)

正在应用主题并覆盖控制级别设置。检查页面,web.config或其他任何可以设置主题的主题设置。

答案 1 :(得分:1)

不幸的是,ASP.NET html渲染非常糟糕。 Microsoft知道并在2006年提供了Control adapters,允许您修改控件呈现。

我建议不要搜索如何覆盖ASP.NET呈现的内容,而是建议使用CSSFriendly为大多数ASP.NET呈现错误的控件提供控件适配器。

如果你不需要“纯css渲染”而CSS害怕你,你可以检查他们如何创建你自己的适配器。

来自Google的

ScottGu post on this subject