ViewStateを追跡する前に制御プロパティを設定して遊ぶ必要がある場合を除き、個人的には動的制御追加ロジックをOnInitイベントに配置します。
(マスターページを使用している場合)あなたが本当に動的PREINIT中にコントロールを追加したい場合は、常にこのような何かを行うことができます:「マスター」プロパティにアクセス
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
TextBox textBox = new TextBox();
textBox.Text = "Dynamic TextBox";
textBox.Width = 100;
textBox.ReadOnly = false;
var master = this.Master;
plcHolder.Controls.Add(textBox);
textBox.ApplyStyleSheetSkin(this.Page);
}
はコントロール し、それをインスタンス化しますうまくいくはずですが、ネストされたマスターページのシナリオ(this.Master.Master ...)、パネルの更新などが得られます。
これは、関連すると役に立つかもしれません:http://weblogs.asp.net/ysolodkyy/archive/2007/10/09/master-page-and-preinit.aspx
また、私は考えることができる理由のひとつ(ほかには、定義されたページのライフサイクル以下)MSは、我々のでPREINITイベントに動的にコントロールを作成するためのすべてのロジックを配置することをお勧めしますInitイベントが行われる前に、利用可能なすべてのスキンプロパティを自動的に適用するテーマサービスを利用できます。
は、あなたのマークアップがそのような何かに見えると言う:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Trace="true" Inherits="_Default" Theme="Test" %>
を...
<form id="form1" runat="server">
<div>
<p>
<asp:TextBox ID="TextBox1" runat="server" TextMode="Password" Text="Control TextBox"></asp:TextBox>
</p>
<p>
<asp:PlaceHolder ID="plcHolder" runat="server"></asp:PlaceHolder>
</p>
</div>
</form>...
とあなたはこのような皮膚があります:あなたはどのようにInitイベントにすべてのスキンプロパティを行く前に気づくでしょう
private TextBox tb1;
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
tb1 = new TextBox();
tb1.Text = "PreInit Dynamic TextBox";
Trace.Write(String.Format("tb1 Wrap Property-> {0}",tb1.Wrap));
Trace.Write(String.Format("tb1 Text Property-> {0}", tb1.Text));
Trace.Write("Add tb1 to the placeholder.");
plcHolder.Controls.Add(tb1);
Trace.Write(String.Format("tb1 Wrap Property-> {0}", tb1.Wrap));
Trace.Write(String.Format("tb1 Text Property-> {0}", tb1.Text));
}
protected override void OnInit(EventArgs e)
{
Trace.Write(String.Format("tb1 Wrap Property-> {0}", tb1.Wrap));
Trace.Write(String.Format("tb1 Text Property-> {0}", tb1.Text));
base.OnInit(e);
}
protected void Page_Load(object sender, EventArgs e)
{
Trace.Write(String.Format("tb1 Wrap Property-> {0}", tb1.Wrap));
Trace.Write(String.Format("tb1 Text Property-> {0}", tb1.Text));
}
:
<asp:TextBox runat="server" BackColor="Yellow" Wrap="false" Text="Skin property!" > </asp:TextBox>
ただ、後ろのあなたのコードにこれを追加します動的に作成されたテキストボックスに既に適用されています:)