DropDownList SelectedIndexChanged事件在几个Dropdown上触发两次

时间:2011-03-25 14:27:28

标签: 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">

<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 />");
    }
}

所有DropDown的EnableViewState =“false”。

有人可以解释为什么DropdownList1_SelectedIndexChanged事件在第一个下拉列值更改后执行两次,然后在第二个或第三个下拉列表中更改值。

谢谢!

1 个答案:

答案 0 :(得分:1)

您通过为EnableViewState="false"设置了下拉列表来禁用了视图状态。 请查看有关MSDN的说明:

  

列表控件必须保留一些   邮件到服务器之间的值   这个事件能正常工作。确定   该视图状态已启用   列表控制。

同样OnSelectedIndexChanged事件处理程序对于每个下拉列表都是相同的:OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"

所有这些意味着在回发后,您的下拉列表认为如果所选值与第一个列表项的值不同,则所选值已更改。这就是为什么你的事件处理程序在第二次回发之后会被激活两次,甚至在第三次回复后三次。

只需启用viewstate以获取下拉列表以防止出现此类行为。