我想这个问题很难 . 我有两个页面具有相同的功能 . 第一个是人民 . 第二个是作为副本创建的,然后对产品进行了一些修改 .
我在两个页面都有 DropDownLists ,两个DDL都有 OnSelectedIndexChanged 事件和 AutoPostBack options enabled . 这两个页面都有代码隐藏程序 RefreshPage ,它使用 id 参数重新加载页面 . 此 id 参数是下拉列表中的实际选定值 .
所以,按设计:
1)我更改DDL的选定项目,它执行AutoPostBack并触发OnSelectedIndexChanged事件 .
2)此事件运行 RefreshPage procedure,它将当前选定的DDL值添加到QueryString并使用它重新加载页面 .
3)然后,此ID从QueryString中获取并设置为DDL . 看代码 .
RefreshPage 在 People.aspx 页面上成功运行 . 但 Products.aspx 上的类似程序从未运行过 . 我将断点添加到两个过程的相同位置 - 使用 Page.Response.Redirect 方法的行 . 在第一页上它停止并显示参数 paramID 的正确值,但第二页永远不会到达断点 . 简单地跳过 OnSelectedIndexChanged 事件 .
两个页面都有 EnableViewState disabled . 我不't use javascript or AJAX. I don'吨使用 PreRender 方法 .
这是我的代码 .
People.aspx:
<asp:DropDownList ID="ddJGroup" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="DropDown" Font-Bold="True"/>
People.aspx.cs:
protected void RefreshPage(object s, EventArgs e)
{
paramID = ddJGroup.SelectedValue;
Page.Response.Redirect("People.aspx?id=" + paramID);
}
Products.aspx:
<asp:DropDownList ID="ddCType" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="class_DropDown" Font-Bold="True"/>
在这两个页面中,我从QueryString中获取 id 参数,并在Page_Load过程中使用它设置DropDownLists的选定值 . 见下文 .
Products.aspx.cs:
...
if ((Request.QueryString["id"] != null) && (Request.QueryString["id"] != ""))
paramID = Convert.ToInt32(Request.QueryString["id"]);
...
ddCType.DataSource = sqlReader;
ddCType.DataValueField = "c_type_id";
ddCType.DataTextField = "type_name";
ddCType.DataBind();
ddCType.SelectedIndex = ddCType.Items.IndexOf(ddCType.Items.FindByValue(Convert.ToString(paramID)));
这段代码工作正常 . 但是在 Products.aspx 上,参数 paramID 永远不会改变 . 它应该在 RefreshPage 过程中更改,但该过程永远不会运行,并且永远不会更改 QueryString["id"] 参数 . 我的意思是,这个页面永远不会从 RefreshPage 重新加载,它总是做简单的PostBack .
在RefreshPage过程中:
protected void RefreshPage(object o, EventArgs e)
{
paramID = ddCType.SelectedValue;
Page.Response.Redirect("Products.aspx?id=" + paramID);
}
如果此过程运行,页面将使用新的 id 参数重新加载,dropdownlist将获得此新索引 .
1 回答
我会说 DropDownList_SelectedIndexChanged 事件的70-90%因为页面中某些数据绑定到控件的错误而没有被触发,
检查页面中的绑定并检查每次页面加载时是否绑定它检查:
因此每次发生回发事件时都不会绑定,因此不会触发IndexChanged
问候