Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net DropDownList SelectedIndexChanged事件在少数下拉列表中触发两次_Asp.net_Drop Down Menu_Viewstate - Fatal编程技术网

Asp.net DropDownList SelectedIndexChanged事件在少数下拉列表中触发两次

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">

我有非常简单的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">

<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,即可防止此类行为。

另一种可能是检查您是否正在代码隐藏中再次注册事件处理程序。