在论坛上,动态控件好象是永久的话题。大家都知道要动态控件起作用,PostBack时需要重新生成或装载(LoadControl),而且需要深入了解其状态的变化过程。
有个同事另谋高就,要离开我们工作的地方了。我给她出了一道出门考题,同时也叫其他手下一起参加。这题目是这样的:
下面两页差别很小,就是一句语句的前后次序有所不同,但PostBack后显示效果有所不同,请解释为什么显示效果不同,并且解释正确显示的那页(你知道是哪页,对么?)中Response.Write的输出结果
TestDyn1.aspx:
<html>
<body> <form id=”form1″ runat=”server”> <asp:Button id=”btn” runat=”server” Text=”Click Me” OnClick=”Button_Click” /> <br/> 静态: <asp:DropDownList id=”ddlStatic” runat=”server”> <asp:ListItem Text=”1″ Value=”1″ /> <asp:ListItem Text=”2″ Value=”2″ /> <asp:ListItem Text=”3″ Value=”3″ /> </asp:DropDownList> <br/> 动态: </form> </body> </html> void Page_Load(Object sender, EventArgs e) form1.Controls.Add(ddlDynamic); if (!IsPostBack) void Button_Click(Object sender, EventArgs e) |
TestDyn2.aspx:
<html>
<body> <form id=”form1″ runat=”server”> <asp:Button id=”btn” runat=”server” Text=”Click Me” OnClick=”Button_Click” /> <br/> 静态: <asp:DropDownList id=”ddlStatic” runat=”server”> <asp:ListItem Text=”1″ Value=”1″ /> <asp:ListItem Text=”2″ Value=”2″ /> <asp:ListItem Text=”3″ Value=”3″ /> </asp:DropDownList> <br/> 动态: </form> </body> </html> void Page_Load(Object sender, EventArgs e) if (!IsPostBack) form1.Controls.Add(ddlDynamic); void Button_Click(Object sender, EventArgs e) |
了解ViewState与控件生命周期的人,对这题自然不在话下。鉴于Lostinet对此有深入研究,本题禁止他参与,
注:本题是从我在CSDN上回答过的一个问题改编而来的