我有非常简单的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事件在第一个下拉列值更改后执行两次,然后在第二个或第三个下拉列表中更改值。
谢谢!
答案 0 :(得分:1)
您通过为EnableViewState="false"
设置了下拉列表来禁用了视图状态。
请查看有关MSDN的说明:
列表控件必须保留一些 邮件到服务器之间的值 这个事件能正常工作。确定 该视图状态已启用 列表控制。
同样OnSelectedIndexChanged
事件处理程序对于每个下拉列表都是相同的:OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
。
所有这些意味着在回发后,您的下拉列表认为如果所选值与第一个列表项的值不同,则所选值已更改。这就是为什么你的事件处理程序在第二次回发之后会被激活两次,甚至在第三次回复后三次。
只需启用viewstate以获取下拉列表以防止出现此类行为。