Asp.net DropDownList SelectedIndexChanged事件在少数下拉列表中触发两次
我有非常简单的aspx页面和代码:Asp.net DropDownList SelectedIndexChanged事件在少数下拉列表中触发两次,asp.net,drop-down-menu,viewstate,Asp.net,Drop Down Menu,Viewstate,我有非常简单的aspx页面和代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" EnableViewState="false">
<asp:ListItem>Item1</asp:ListItem>
<asp:ListItem>Item2</asp:ListItem>
<asp:ListItem>Item3</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" EnableViewState="false">
<asp:ListItem>Item1</asp:ListItem>
<asp:ListItem>Item2</asp:ListItem>
<asp:ListItem>Item3</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" EnableViewState="false">
<asp:ListItem>Item1</asp:ListItem>
<asp:ListItem>Item2</asp:ListItem>
<asp:ListItem>Item3</asp:ListItem>
</asp:DropDownList>
</form>
</body>
</html>
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("DropDownList1_SelectedIndexChanged called! <br />");
}
}
无标题页
项目1
项目2
项目3
项目1
项目2
项目3
项目1
项目2
项目3
使用制度;
使用系统配置;
使用系统数据;
使用System.Linq;
使用System.Web;
使用System.Web.Security;
使用System.Web.UI;
使用System.Web.UI.HTMLControl;
使用System.Web.UI.WebControl;
使用System.Web.UI.WebControl.WebParts;
使用System.Xml.Linq;
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的void DropDownList1\u SelectedIndexChanged(对象发送方,事件参数e)
{
响应。写入(“DropDownList1\u SelectedIndexChanged called!
”;
}
}
所有下拉列表的EnableViewState=“false”
谁能解释一下为什么DropDownList1\u SelectedIndexChanged事件在第一个下拉列表值更改后执行两次,然后在第二个或第三个下拉列表中更改值
谢谢 您通过设置下拉列表的
EnableViewState=“false”
来禁用下拉列表的viewstate。
请查看以下内容的说明:
列表控件必须保留一定的时间
在发送到服务器的
此事件无法正常工作。确定
该视图状态已为
列表控件
另外,OnSelectedIndexChanged
事件处理程序对于每个下拉列表都是相同的:OnSelectedIndexChanged=“DropDownList1\u SelectedIndexChanged”
所有这一切都意味着,回发后,如果所选值与第一个列表项的值不同,则下拉列表认为所选值已更改。这就是为什么在第二次回发后事件处理程序会触发两次,甚至在第三次回发后触发三次
只需为下拉列表启用viewstate,即可防止此类行为。另一种可能是检查您是否正在代码隐藏中再次注册事件处理程序。