Page.EnableEventValidation = false无法识别新的下拉列表值

时间:2015-10-07 20:06:34

标签: javascript c# asp.net visual-studio-2010 asp.net-4.0

我的测试网络表单有1 dropdownlist和2 buttons。就是这样:

<form id="form1" runat="server">
    <asp:DropDownList ID="DropDownListTest" runat="server" >
        <asp:ListItem>Value 0</asp:ListItem>
        <asp:ListItem>Value 1</asp:ListItem>
        <asp:ListItem>Value 2</asp:ListItem>
    </asp:DropDownList>

<asp:Button ID="ButtonClient" runat="server" Text="Button" OnClientClick="ChangeDropDown(); return false;" />

<asp:Button ID="ButtonServer" runat="server" Text="Server" onclick="ButtonServer_Click" />
</form>

这是javascript函数ChangeDropDown()

function ChangeDropDown() {
        for (i = document.getElementById("<%=DropDownListTest.ClientID%>").options.length - 1; i >= 0; i--) {
            document.getElementById("<%=DropDownListTest.ClientID%>").remove(i);
        }
        var opt = document.createElement("option");

        opt.text = "Complete";
        opt.value = "Complete";
        document.getElementById("<%=DropDownListTest.ClientID%>").options.add(opt);


        var opt2 = document.createElement("option");
        opt2.text = "Not Complete";
        opt2.value = "Not Complete";
        document.getElementById("<%=DropDownListTest.ClientID%>").options.add(opt2);
} 

这就是代码隐藏:

    protected void ButtonServer_Click(object sender, EventArgs e)
    {
        string val = this.DropDownListTest.SelectedValue;
    }
    protected void Page_PreInit(object sender, EventArgs e)
    {
        Page.EnableEventValidation = false;
        //"Invalid postback or callback argument" if I remove this.
    }

让我们点击button ButtonClient(更改下拉列表的值),选择&#34;完成&#34;然后单击ButtonServer。在代码隐藏中,this.DropDownListTest.SelectedValue的值等于&#34;值0&#34;而不是&#34;完成&#34;。

我理解为什么我会遇到问题,但除了添加代码隐藏项之外还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

您无法以标准方式获取值,因为服务器不知道下拉列表中的项目已更改。

但是,您可以直接从请求中获取值:

protected void ButtonServer_Click(object sender, EventArgs e)
{
    string val = Request[this.DropDownListTest.UniqueID];
}