1

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

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

PS这是代码片段。

<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

4 回答 4

2

Every time I've ever had something like this happen it's been because of validation controls. Do those additional textboxes have validators attached to them that could be suppressing the postback? A quick way to tell would be to set CausesValidation="false" on the dropdownlist.

于 2009-07-31T14:33:39.203 回答
1

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

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

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

迈克尔

于 2008-11-16T14:50:49.370 回答
0

你是如何附加事件的?您是否正在使用后面的代码,例如:

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

还是您在 ASPX/ASCX 中分配它?

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

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

于 2008-10-28T12:12:01.157 回答
0

我只能想到两个问题要问。

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

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

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

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

使事件正确触发的唯一另一种方法是将其包含在按钮中,但您似乎已经正确地做到了。您可能想以我上面提到的方式尝试它,看看这是否对您有任何改变。

安德鲁

于 2008-11-07T01:58:15.973 回答