代码之家  ›  专栏  ›  技术社区  ›  BeemerGuy

初始化时控件的CssClass字段更改

  •  0
  • BeemerGuy  · 技术社区  · 15 年前

    我正在研究别人的代码,发现了一些非常有趣的东西,希望有人知道这是怎么回事。

    TextBox 控制和 DropDownList 控件,并将 CssClass 属于 InputField

    为了避免任何疑问,以下是我的声明,请从IDE中逐字复制粘贴:

    <asp:TextBox runat="server" ID="txtCity" CssClass="InputField" />
    <asp:DropDownList runat="server" ID="ddlState" CssClass="InputField" OnInit="ddlState_Init" OnLoad="ddlState_Load" />
    

    <input> 有正确的类名。
    但是 <select> dropdown ,它恰好在项目中的另一个.css文件中定义,当然它的样式与我的不同。

    再次从视图源逐字记录:

    <input name="ctl00$ctl00$BodyContentPlaceHolder$ContentPlaceHolder1$txtCity" type="text" id="ctl00_ctl00_BodyContentPlaceHolder_ContentPlaceHolder1_txtCity" class="InputField" />
    <select name="ctl00$ctl00$BodyContentPlaceHolder$ContentPlaceHolder1$ddlState" id="ctl00_ctl00_BodyContentPlaceHolder_ContentPlaceHolder1_ddlState" class="dropdown"></select>
    

    为了了解这是如何发生的,我对以下每一个事件都进行了调查:

    • Page_Init
    • Page_Load
    • ddlStates_Init
    • ddlStates_Load

    加了一块手表 ddlStates.CssClass
    令我震惊的是,我发现在所有的事件中 CssClass公司 已更改为 .


    有什么我不知道的东西可以覆盖这样的值吗?
    即使有什么 在控件的 Init

    供参考 :页类不是从任何页基类继承的-直接向上 System.Web.UI.Page

    供参考 :我确保 ddlStates

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  2
  •   JonVD    15 年前

    在深入挖掘之前,有几件事需要检查。我首先要找的是皮肤/主题文件。这些文件会覆盖控件的外观以使它们感觉一致,但当您不知道它们时,它们会造成严重破坏。要检查这个,只要看看你的页眉或看看周围的皮肤文件。

    Here

    从以上源中的“节主题设置”优先级下:

    如果设置页面的主题属性, 控制主题和中的设置 控件的设置。如果一个控件 在两个控件中都定义了设置 以及主题、控件设置 从主题覆盖任何页面 控件上的设置。这个策略 使主题能够创建 页上的控件已具有 个别属性设置。为了 例如,它允许您应用 在中创建的网页的主题 早期版本的ASP.NET。

    或者,可以应用主题 页的StyleSheetTheme属性。在 优先于 两个地方。这是 层叠样式表。你可以 如果你想设置 上单个控件的属性 仍应用主题时的页面 整体造型。