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從視圖狀態加載所選值

但是在這裏解決了最初的問題。

相關問題