今天由於工作需要,不得不對已經編譯好的DropDownList的控制項中的選項進行增刪操作,
例如一個索引值都為1,2,3的DropDownList
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
編譯後:<select name="DropDownList1" id="DropDownList1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
本以為用js增加一個 <option value="4>4/option>,選中4這個選項後,調用伺服器事件 Response.Write(DropDownList1.SelectedValue);結果
回傳或回調參數無效。在配置中使用 <pages enableEventValidation="true"/> 或在頁面中使用 <%@ Page EnableEventValidation="true" %> 啟用了事件驗證。出於安全目的,此功能驗證回傳或回調事件的參數是否來源於最初呈現這些事件的伺服器控制項。如果資料有效並且是預期的,則使用 ClientScriptManager.RegisterForEventValidation 方法來註冊回傳或回調資料以進行驗證。
將enableEventValidation="false" 後,即使是將EnableViewState="false",無論怎麼選中4,也不會Response出來,看來是對asp.net機制的不夠深入,難道是用戶端向伺服器端調用方法的參數一定要是綁定的內容之內???