0

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

我在两个页面上都有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 disabled。我不使用 javascript 或 AJAX。我不使用PreRender方法。

这是我的代码。

人.aspx:

<asp:DropDownList ID="ddJGroup" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="DropDown" Font-Bold="True"/>

人.aspx.cs:

protected void RefreshPage(object s, EventArgs e)
{
    paramID = ddJGroup.SelectedValue;
    Page.Response.Redirect("People.aspx?id=" + paramID);
}

产品.aspx:

<asp:DropDownList ID="ddCType" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="class_DropDown" Font-Bold="True"/>

在这两个页面中,我从 QueryString 中获取id参数,并在 Page_Load 过程中使用它设置 DropDownLists 的选定值。见下文。

产品.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参数重新加载,并且下拉列表将获取此新索引。

4

1 回答 1

0

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

检查以查看页面中的绑定并检查您是否在每次页面加载时都没有绑定它检查:

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


}

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

问候

于 2013-05-24T15:41:51.863 回答