Page.EnableEventValidation = false 不识别新的下拉列表值
Page.EnableEventValidation = false does not recognize new dropdownlist values
我的测试网络表单有 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
(这会更改下拉列表的值)、select "Complete",然后单击 ButtonServer
。在代码隐藏中,this.DropDownListTest.SelectedValue
的值等于 "Value 0" 而不是 "Complete".
我明白我为什么会遇到这个问题,但是除了添加项目代码隐藏之外还有其他解决方案吗?
您无法以标准方式获取值,因为服务器不知道下拉列表的项目已更改。
但是,您可以直接从请求中获取值:
protected void ButtonServer_Click(object sender, EventArgs e)
{
string val = Request[this.DropDownListTest.UniqueID];
}
我的测试网络表单有 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
(这会更改下拉列表的值)、select "Complete",然后单击 ButtonServer
。在代码隐藏中,this.DropDownListTest.SelectedValue
的值等于 "Value 0" 而不是 "Complete".
我明白我为什么会遇到这个问题,但是除了添加项目代码隐藏之外还有其他解决方案吗?
您无法以标准方式获取值,因为服务器不知道下拉列表的项目已更改。
但是,您可以直接从请求中获取值:
protected void ButtonServer_Click(object sender, EventArgs e)
{
string val = Request[this.DropDownListTest.UniqueID];
}