【问题标题】:Page.EnableEventValidation = false does not recognize new dropdownlist valuesPage.EnableEventValidation = false 不识别新的下拉列表值
【发布时间】:2015-10-07 20:06:34
【问题描述】:

我的测试网络表单有 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(更改下拉列表的值),选择“完成”,然后点击ButtonServer。在代码隐藏中,this.DropDownListTest.SelectedValue 的值等于“值 0”而不是“完成”。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 就我而言,它运行良好,因为ValueText 是相同的。但是,如果我想检索Text 而不是Value,我会使用什么?谢谢。
    • Text 未回发到服务器。如果您需要文本,您可以:(1) 在服务器上重建项目以匹配在客户端所做的更改或 (2) 使用隐藏字段来存储来自 javascript 的文本并获取这些隐藏字段的值服务器。
    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多