THE CONCEPTION
步骤1. DropDownList填充了Page_Load上的项目。
步骤2.我选择一个项目并启动回发。在此回发页面首先刷新,然后OnSelectedIndexChanged触发并运行“ddl1_Select”函数。
问题
如果我使用Aspx(HTML)文件中的数据静态填充DropDownList,它可以正常工作。 但是,如果我在代码隐藏中填充它,OnSelectedIndexChanged事件永远不会触发,并且DDL1_Select过程不会启动。页面只是回发并跳过我的程序。为什么这个事件不会激活以及如何使它发挥作用?
ASPX:
<%@ Page Language="C#" MasterPageFile="~/Master.master" AutoEventWireup="true"
CodeFile="mypage.aspx.cs" Inherits="mypage" Title="mypage" EnableViewState="False" %>
...
<asp:DropDownList ID="ddl1" runat="server" OnSelectedIndexChanged="ddl1_Select" AutoPostBack="True"/>
ASPX.CS:
protected void Page_Load(object sender, EventArgs e)
{
ddl1.Items.Add("1");
ddl1.Items[0].Value = "1";
ddl1.Items.Add("2");
ddl1.Items[1].Value = "2";
ddl1.Items.Add("3");
ddl1.Items[2].Value = "3";
if (Session["NewSelection"] != null) // see note 1
{
string itemValue = Session["NewSelection"].ToString();
ddl1.SelectedIndex = ddl1.Items.IndexOf(ddl1.Items.FindByValue(itemValue));
Session["NewSelection"] = null; // see note 1
}
}
protected void DDL1_Select(object o, EventArgs e)
{
Session["NewSelection"] = ddl1.SelectedValue;
Page.Response.Redirect("mypage.aspx?test=" + Session["NewSelection"].ToString());
}
注1 。这些指令用于防止ddl1从会话变量中获取旧索引。因此,在我选择ddl1中的项目之后,首先进行回发。在此回发期间,ddl1从会话变量中获取旧索引,之后我的新选择将丢失。通过这些说明,我可以防止它。但除非主要问题得到解决,否则它没有任何区别。
答案 0 :(得分:0)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddl1.Items.Add("1");
ddl1.Items[0].Value = "1";
ddl1.Items.Add("2");
ddl1.Items[1].Value = "2";
ddl1.Items.Add("3");
ddl1.Items[2].Value = "3";
if (Session["NewSelection"] != null) // see note 1
{
string itemValue = Session["NewSelection"].ToString();
ddl1.SelectedIndex = ddl1.Items.IndexOf(ddl1.Items.FindByValue(itemValue));
Session["NewSelection"] = null; // see note 1
}
}
}