我猜这个问题很难。我有两个页面具有相同的功能。第一个是人民。第二个是作为副本创建的,然后对产品进行了一些修改。
我的 DropDownLists两个页面上后,双方的DDL有 OnSelectedIndexChanged 事件并启用的的AutoPostBack选项。这两个页面都有代码隐藏程序 RefreshPage ,它会使用 id 参数重新加载页面。此 id 参数是下拉列表中的实际选定值。
所以,按设计:
1)我更改了DDL的选定项目,它执行AutoPostBack并触发OnSelectedIndexChanged事件。
2)此事件运行 RefreshPage 过程,该过程将当前选定的DDL值添加到QueryString并使用它重新加载页面。
3)然后,此ID从QueryString中获取并设置为DDL。见代码。
RefreshPage 在 People.aspx 页面上成功运作。但 Products.aspx 上的类似程序根本不会运行。我在两个程序的相同位置添加了断点 - 使用 Page.Response.Redirect 方法的行。在第一页上它停止并显示参数 paramID 的正确值,但第二页永远不会到达断点。 OnSelectedIndexChanged 事件只是被跳过。
两个页面都禁用EnableViewState 。我不使用javascript或AJAX。我不使用 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将获得此新索引。
答案 0 :(得分:0)
我会说70-90%的 DropDownList_SelectedIndexChanged 事件没有因为页面中某些数据绑定到控件的错误而被触发,
检查页面中的Binding并检查每次页面加载时是否绑定它检查:
if(!IsPostBack)
{
mydropdownlist.DataSource=yourDataSource;
mydropdownlist.DataBind();
}
因此每次发生回发事件时都不会绑定,因此不会触发IndexChanged
问候