首页 文章

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

提问于
浏览
0

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

我在两个页面都有 DropDownLists ,两个DDL都有 OnSelectedIndexChanged 事件和 AutoPostBack options enabled . 这两个页面都有代码隐藏程序 RefreshPage ,它使用 id 参数重新加载页面 . 此 id 参数是下拉列表中的实际选定值 .

所以,按设计:

1)我更改DDL的选定项目,它执行AutoPostBack并触发OnSelectedIndexChanged事件 .

2)此事件运行 RefreshPage procedure,它将当前选定的DDL值添加到QueryString并使用它重新加载页面 .

3)然后,此ID从QueryString中获取并设置为DDL . 看代码 .

RefreshPagePeople.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 回答

  • 0

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

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

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

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

    问候

相关问题