私は他の人のコードに取り組んでいて、非常に興味深いものを見つけました。誰かがこれがどのように起こっているかを知っていることを願っています.
マークアップ ファイルに、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
ことを確認し、実行したすべてのイベント ステップ インでその情報が保持されていることを確認しました。
ありがとう。