2011-05-25 65 views
0

我有一個問題非常類似於this question。我的頁面上有一個下拉菜單,會導致回發,在此期間,ASP:ImageImageUrl屬性發生更改。當回發發生時,FileUpload中的任何值都將被清除。這是我想解決的問題,但我在這個過程中遇到了這個問題。UpdatePanel異步回發沒有更新內容

我試圖通過將下拉和圖像包裝在UpdatePanel中來解決問題。這裏是我的ASP標記:

<asp:UpdatePanel ID="upPanel" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="myDropdown" 
      EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <tr valign="top"> 
     <td>Tag:</td> 
     <td> 
      <asp:DropDownList ID="myDropdown" runat="server" 
         AppendDataBoundItems="true" DataTextField="Name" 
         DataValueField="ID" AutoPostBack="true"> 
       <asp:ListItem Value="" /> 
      </asp:DropDownList> 
     </td> 
     </tr> 
     <TR vAlign="top"> 
     <TD width="150">Thumbnail:</TD> 
     <TD> 
       <asp:Image id="imgThumbnail" Runat="server" 
        AlternateText="No Image Found" 
        Visible="false"></asp:Image><BR> 
     </TD> 
     </TR> 
    </ContentTemplate> 
</asp:UpdatePanel> 

編輯:我的代碼,這樣做背後的更新是在這裏:

Private Sub myDropdown_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myDropdown.SelectedIndexChanged 
     If (myDropdown.SelectedValue <> "-1") Then 
      imgThumbnail.ImageUrl = Application("AppPath") + "/Modules/Broadcaster/ImageGen.ashx?tag=" + myDropdown.SelectedValue 
     Else 
      imgThumbnail.ImageUrl = Application("AppPath") + "/Modules/Broadcaster/ImageGen.ashx?defaultTag=" + _modID.ToString() 
     End If 
End Sub 

我可以看到異步回發在Firebug發生,但圖像的URL不會改變。我究竟做錯了什麼?

回答

0

您錯過了執行更新的代碼(所選索引在下拉列表中更改時調用的代碼);然而,我要冒險猜測你的問題是由於你正在通過控件加載DDL而不是以編程方式加載的。

您可能會遇到此問題的原因是因爲在填充數據源控件之前調用頁面加載函數,這意味着您正在查找值時不會填充DDL,因此您的圖像是想出一個空白。

例子:

Dim sTemp As String = "images/myimagenumber" & myDropdown.SelectedIndex & ".jpg" 

這將返回「圖像/ myimagenumber.jpg」作爲STEMP字符串的值,因爲沒有價值或索引選擇的瞬間加載頁面。

我建議你手動(以編程方式)加載下拉列表的值,然後在page_load子例程中確保只在第一次加載頁面時重新填充下拉列表。

VB.Net實例:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    If Page.IsPostback = False Then 
      runDBLFillSubHere() 
    End If 

    'Run Rest of Code Here' 
Sub 

我多年來碰到這樣幾次,它總是最終被因爲我訪問之前的DDL不填充。

+0

我編輯了問題以添加VB代碼隱藏。在添加更新面板之前,這工作正常。它在我添加UpdatePanel之前工作正常;你是否說下拉菜單在異步回發上沒有正確填充?無論哪種方式,我解決了這個問題,通過使用jQuery來更改ddl的change()事件的圖像路徑,所以這個問題更多的是關於好奇心的問題。 – 2011-05-25 22:19:16

+0

正確。在調用page_load函數之前,異步回發似乎不會填充DDL(因爲每次加載頁面時都會調用它,而不管回發的類型如何)。 jQuery始終是一個選項;但是,我通常會盡可能將代碼保留在代碼隱藏中,這就是爲什麼當我遇到這些問題時想出解決方案的原因。 – akuta 2011-05-25 22:37:05