我正在研究别人的代码,发现了一些非常有趣的东西,并希望有人知道这是怎么回事。
在标记文件中,我放置了一个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
更改为dropdown
。
这么早改班名是怎么回事?
我不知道这样的覆盖值可以吗?
即使某些东西确实Init
改变了值,它可以在控件的事件本身 之前做到这一点吗?
仅供参考:页面类不是从任何页面基类继承的——只是直接的System.Web.UI.Page
。
仅供参考:我通过添加一个随机属性来确保我正在查看正确的ddlStates
实例,并验证它在我所做的所有事件步骤中都保留了该信息。
谢谢。