0

这是一个难以解释的场景,所以我编写了一个简单的示例。updatepanel内的Dropdown autopost从来没有在SelectedIndexChanged事件后面输入代码

<asp:UpdatePanel runat="server" ID="upTest" ChildrenAsTriggers="true" 
UpdateMode="Conditional"> 
    <ContentTemplate> 
    <asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true"></asp:DropDownList> 
    <br /><br /> 
    In page: <asp:TextBox runat="server" ID="txtTest" Columns="50" Text="OnLoad</asp:TextBox> 
    <br /> 
    <br /> 
    <asp:Button runat="server" ID="btnTest" Text="Click it" /> 
    </ContentTemplate> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="ddlTest" /> 
    </Triggers> 
</UpdatePanel> 

代码隐藏

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Page.IsPostBack Then 
     BindDropDown(Request.Form(ddlTest.UniqueID)) 
    Else 
     BindDropDown(0) 
    End If 
End Sub 

Public Sub BindDropDown(val As Integer) 

    ddlTest.Items.Add(New ListItem("", 0)) 
    ddlTest.Items.Add(New ListItem("One", 1)) 
    ddlTest.Items.Add(New ListItem("Two", 2)) 
    ddlTest.Items.Add(New ListItem("Three", 3)) 
    ddlTest.Items.Add(New ListItem("Four", 4)) 
    ddlTest.SelectedValue = val 

End Sub 

Private Sub ddlTest_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ddlTest.SelectedIndexChanged 
    txtTest.Text = "Dropdown changed" 
End Sub 

Private Sub btnTest_Click(sender As Object, e As System.EventArgs) Handles btnTest.Click 
    txtTest.Text = "Button clicked" 
End Sub 

另外要注意,我的EnableViewState = “假” 和的ClientIDMode =该页面 “静态”。

当我点击局部回传出现按钮和文本框有“按钮点击了”预期值

当我改变局部回传出现下拉菜单,但文本框不具备的“预期值下拉改变”,因为在ddlTest_SelectedIndexChanged代码永远不会打(在该行代码断点位置也嗟)

在我的项目的更大的范围,这是问题的症结所在,我不能确定为什么这个事件永远不会被击中(核心问题是当我加载一个动态用户控件时,控件中的数据被正确绑定,但之后被t之前的数据覆盖他的用户控件被加载 - 覆盖发生在回发事件的某处)。在我看来,它与下拉菜单的绑定以及它在页面循环中发生的位置有关,但我一直无法找到任何东西,也没有拿出谷歌解决方案。

在Firebug中查看帖子时我注意到了一件奇怪的事 - 下拉列表的EVENTTARGET值是下拉列表的UniqueId,但EVENTTARGET值是空按钮点击。我的大脑认为这里有一些联系。

仅供参考 - 我已经想出了一个解决方案,似乎有伎俩。我将下拉列表中的autopostback设置为false,并使用jQuery将下拉菜单中的更改事件分配为触发按钮单击 - 这会导致回发并在代码中触发btn_click事件。

回答

0

我通过移动下拉列表填充到init事件,然后在做这个,现在在每个回发的selectedIndex事件触发让.NET从视图状态加载所选值

但是在这里解决了最初的问题。

相关问题