我有这个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);
}
答案 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
让事件正常启动的唯一方法是将其包含在按钮中,但您似乎已经正确地执行了此操作。您可能希望以我上面提到的方式尝试它,看看它是否会为您改变任何内容。
安德鲁