Генерируемый GridView код добавляет "width = '100%'" к создаваемой таблице. - PullRequest
0 голосов
/ 01 ноября 2010

Моя страница выглядит корректно в Firefox и IE8. Но в IE7 вложенная сетка просматривается в соседней ячейке, очень похоже на проблему здесь .

Если посмотреть на это в инструментах разработчика, то с таблицей, сгенерированной ASP.NET, связан встроенный стиль, который имеет атрибут ширины 100%. Если я удаляю это, вложенная таблица возвращается туда, где она принадлежит.

Проблема в том, что нигде нет встроенного набора стилей. Фактически, если я пытаюсь установить width='250px', он переопределяется с width='100%'. Если я попытаюсь удалить атрибут width в выделенном фрагменте кода, attrGridView.Attributes["Width"] будет нулевым, а вызов .Remove() ничего не сделает. Но у каждой таблицы gridview, созданной asp.net, есть встроенный стиль с установленным 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 ]

2 голосов
/ 02 ноября 2010

Темы применяются и переопределяют настройки уровня управления.Проверьте настройки темы на странице, в web.config или в любом другом месте, где может быть установлена ​​тема.

1 голос
/ 02 ноября 2010

К сожалению, рендеринг ASP.NET HTML действительно плох.Microsoft знает об этом и предоставила Адаптеры управления в 2006 году, которые позволяют изменять управление рендерингом.

Вместо того, чтобы искать, как переопределить то, что делает ASP.NET, я бы посоветовал использовать CSSFriendly , который предоставляет адаптеры для большинства элементов управления ASP.NET с плохой визуализацией.

Если вам не нужен «рендеринг pure-css» и CSS боится вас, вы можете проверить, как они создают вашисобственный адаптер.

Сообщение ScottGu на эту тему от Google.

...