首次回发后,下拉列表不会回发

时间:2008-10-28 11:58:44

标签: asp.net drop-down-menu

我有这个ASP.NET下拉控件,当值不是UK时显示其他文本框控件(这是为了帮助使用邮政编码查找英国地址)。重新选择英国时,我想隐藏其他控件。我已启用视图状态和AutoPostBack为true。我有一个onSelectedIndexChanged事件只会被触发一次(当下拉值更改为其他国家/地区时,默认为英国)。

我希望每次值不同时都会触发OnSelectedIndexChanged,但事实并非如此。

P.S。这是代码段。

<asp:DropDownList runat="server" ID="Country2" AutoPostBack="True" OnSelectedIndexChanged="Country2_SelectedIndexChanged" DataSource="<%# RegionList %>" DataTextField="Name" DataValueField="Code" CssClass="dropdown country"></asp:DropDownList>


protected void Country2_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList d = (DropDownList)sender;
    addressEntry.CountryPrePostBack_SelectedIndexChanged(d.SelectedItem.Value);
}

4 个答案:

答案 0 :(得分:2)

每次我遇到类似这样的事情都是因为验证控制。那些额外的文本框是否附加了验证器可能会抑制回发?一个快速告诉的方​​法是在下拉列表中设置CausesValidation =“false”。

答案 1 :(得分:1)

在第一次回发时引入了javascript错误时,我看到了类似的行为。

我想当第一次回发导致显示一个新的div(使用javascript,而不是代码隐藏)时,我看到了这个,并且div不在HTML中。所以“show(div)”javascript引用了一个丢失的对象。

当然,这是一个非常具体的案例,但我建议在第一次回发后检查任何js错误。

迈克尔

答案 2 :(得分:0)

你是如何附上这个活动的?您是否正在使用它代码:

this.dropDownList.SelectedIndexChanged += new EventHandler(dropDownList_SelectedIndexChanged);

或者您是在ASPX / ASCX中分配它?

如果是前者,请确保您没有在!IsPostback条件下分配它,您需要确保它在每次回发时添加的事件。

您是否尝试使用调试器来查看回发是否实际发生在子事件中?可能是您新添加的控件导致验证失败,如果您使用验证器,请确保将下拉列表设置为CauseValidation = false,以便每次都回发。

答案 3 :(得分:0)

我只能想到两个问题。

1。)您是否正在填充(绑定)page_load事件的列表?如果是这样,那么你只需要在第一次加载页面时执行此操作。绑定到控件(或其他控件)时,它将重置所选索引。如果启用了viewstate,那么它将保留原始列表。 2.)现在我假设上面已经是真的,这将导致我询问是否从该页面的父节点启用了viewstate。如果您打开跟踪并查看页面控制列表,您应该能够看到此特定项目的视图状态大小。如果它有一个值,那么你知道你正在设置viewstate。如果没有,那么按照父控件的方式工作,以查看viewstate的结束位置。

Viewstate是检测回发所必需的,所以重要的是要看它是否正常工作。

现在我是一名VB.net程序员,我注意到你的子程序中似乎没有处理程序。 在vb.net中,我们通常会看到类似

的内容
Private Sub LinkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton.Click

让事件正常启动的唯一方法是将其包含在按钮中,但您似乎已经正确地执行了此操作。您可能希望以我上面提到的方式尝试它,看看它是否会为您改变任何内容。

安德鲁