我正在研究别人的代码,发现了一些非常有趣的东西,并希望有人知道这是怎么回事。
在标记文件中,我放置了一个TextBox
控件和一个DropDownList
控件,并为它们分配了CssClass
InputField
的{{1}}更改背景颜色和其他酷的东西。
为了避免任何疑问,这里是我的声明,从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
的值已更改为dropdown
。
这么早改变班级名称的原因是什么?
我不知道有关覆盖这样的值的事情吗?
即使某些 更改了值,它是否可以在控件的Init
事件本身之前执行此操作?
FYI :页面类不是从任何页面基类继承的 - 只是直接System.Web.UI.Page
。
仅供参考:我通过添加随机属性确认我 正在查看正确的ddlStates
实例,并确认它在所有中保留了该信息事件介入我做了。
感谢。
答案 0 :(得分:2)
在深入挖掘之前,您需要检查一些事项。我要寻找的第一件事是皮肤/主题文件。这些文件会覆盖控件的外观以使它们保持一致,但是当您不了解它们时可能会造成严重破坏。要检查这一点,只需查看页眉或浏览任何皮肤文件。
Here是一个链接,其中包含有关皮肤/主题文件的更多信息。
从主题设置优先顺序部分的上述来源:
如果您设置了网页的主题属性, 控制主题和设置 页面合并形成最终 控件的设置。如果一个控件 设置在控件中定义 和主题,控制设置 从主题覆盖任何页面 控件上的设置。这个策略 使主题创建一个 即使在页面上也能保持一致的外观 已经拥有的页面上的控件 个人财产设置。对于 例如,它允许您应用 您在一个页面中创建的主题 早期版本的ASP.NET。
或者,您可以应用主题 作为样式表主题通过设置 page的StyleSheetTheme属性。在 这种情况下,本地页面设置采取 优先于那些定义的 定义设置时的主题 这两个地方。这是使用的模型 级联样式表。你可能会 将主题应用为样式表主题 如果你想能够设置 单个控件的属性 仍在应用主题的页面 总的来说。
如果那不是问题,那么我建议暂时更改下拉列表的名称,以确保它没有以编程方式播放。如果失败了,那就开始漫长而艰苦的调试艰难之路。