今天同事回報,這種插隊法會讓下拉選單的選項在PostBack後掉光光,我懷疑是ViewState解析順序被破壞導致,於是寫了以下的Code驗證。以下的寫法,只要呼叫了Page.Form.Controls.AddAt(0, ...), 在按下Button1後,下拉選項就會消失。
<%@ Page Language="C#" AutoEventWireup="true" %>
<html>
<head runat="server">
<title>ViewState Is Missing</title>
</head>
<body>
<form id="form1" runat="server">
<script type="text/C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{ if (!IsPostBack)
{ DropDownList1.Items.Add("Item1"); DropDownList1.Items.Add("Item2"); DropDownList1.Items.Add("Item3"); }
Literal ltr = new Literal();
ltr.Text =
"<script type=\"text/javascript\">function blah() { }</" + "script>";
Page.Form.Controls.AddAt(0, ltr);
}
protected void Button1_Click(object sender, EventArgs e)
{
}
</script>
<div>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
</form>
</body>
</html>