Control.Initイベント内でのプロパティ変更
コントロールのInitイベント内でプロパティを変更しても、その変更はViewStateに記録されない。(『Control.Init イベント (System.Web.UI)』の「解説」に記述あり)結果、HTTPリクエストを跨ると、そのプロパティ変更が失われる。
例えば以下のコードの場合:
// lblHoge:Labelコントロール void lblHoge_Init(Object sender, EventArgs e) { if (!Page.IsPostBack) { lblHoge.CssClass = "hoge"; } }
ページの非ポストバック時の表示では、lblHogeのCssClassは"hoge"となるが、ページがポストバックされ、再表示された時には""となる。
プロパティ変更をViewStateに記録するには、コントロールのLoadからPreRenderの間のイベント(Load、PreRenderを含む)でプロパティ値を設定する。なお、その際にはコントロールがHTMLレンダリングされない場合にはPreRenderイベントが発生しないことにも注意が必要。