Trừ khi bạn cần phải chơi xung quanh với các thuộc tính điều khiển thiết lập trước khi theo dõi ViewState, tôi sẽ đích thân tiếp tục và đặt logic bổ sung điều khiển động trong sự kiện OnInit.
Nếu bạn thực sự muốn tự động thêm một điều khiển trong PreInit (khi sử dụng trang chủ), bạn luôn có thể làm một cái gì đó như thế này:
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);
}
truy cập vào "Thạc sĩ" bất động sản sẽ nhanh chóng điều khiển và nó nên làm việc, nhưng bạn nhận được các kịch bản trang chủ lồng nhau (this.Master.Master ...), cập nhật các bảng và vân vân.
Điều này có thể có liên quan và hữu ích: http://weblogs.asp.net/ysolodkyy/archive/2007/10/09/master-page-and-preinit.aspx
Hơn nữa, một trong những lý do tôi có thể nghĩ đến (ngoài sau vòng đời trang định nghĩa) MS khuyến cáo rằng chúng ta đặt tất cả các logic để tạo kiểm soát năng động trong sự kiện PreInit vì vậy chúng tôi có thể tận dụng dịch vụ chủ đề, sẽ áp dụng tất cả các thuộc tính da có sẵn tự động cho chúng tôi, trước khi sự kiện Init diễn ra.
Giả sử đánh dấu của bạn trông giống như thế:
<%@ 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>...
và bạn có một làn da như thế này:
<asp:TextBox runat="server" BackColor="Yellow" Wrap="false" Text="Skin property!" > </asp:TextBox>
Chỉ cần thêm video này vào mã của bạn đằng sau:
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));
}
Bạn sẽ thấy như thế nào trước khi đi sâu vào sự kiện Init tất cả các đặc tính da đã được áp dụng cho hộp văn bản được tạo động :)