OnSelectedIndexChanged事件发生在一个页面上而不发生在另一个页面上

时间:2013-05-24 15:21:15

标签: asp.net postback procedure autopostback selectedindexchanged

我猜这个问题很难。我有两个页面具有相同的功能。第一个是人民。第二个是作为副本创建的,然后对产品进行了一些修改。

我的 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将获得此新索引。

1 个答案:

答案 0 :(得分:0)

我会说70-90%的 DropDownList_SelectedIndexChanged 事件没有因为页面中某些数据绑定到控件的错误而被触发,

检查页面中的Binding并检查每次页面加载时是否绑定它检查:

if(!IsPostBack)
{
mydropdownlist.DataSource=yourDataSource;
mydropdownlist.DataBind();


}

因此每次发生回发事件时都不会绑定,因此不会触发IndexChanged

问候