2011-05-25 44 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