【问题标题】:UpdatePanel async postback not updating contentUpdatePanel 异步回发不更新内容
【发布时间】:2011-05-25 18:23:21
【问题描述】:

我有一个与this question 非常相似的问题。我的页面上有一个下拉菜单会导致回发,在此期间,ASP:ImageImageUrl 属性会更改。当该回发发生时,FileUpload 中的任何值都将被清除。这就是我要解决的问题,但在这个过程中我遇到了这个问题。

我试图通过将下拉列表和图像包装在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 没有改变。我做错了什么?

【问题讨论】:

    标签: asp.net file-upload updatepanel


    【解决方案1】:

    您缺少执行更新的代码(所选索引调用的代码在下拉列表中发生变化);但是,我冒昧地猜测您的问题是由于您通过控件而不是以编程方式加载 DDL 引起的。

    您可能遇到此问题的原因是因为在填充数据源控件之前调用了页面加载函数,这意味着在您查找值时未填充 DDL,因此您的图像即将到来加上一个空白。

    例子:

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

    这将返回“images/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 之前没有填充它。

    【讨论】:

    • 我编辑了问题以添加 VB 代码隐藏。这在我添加更新面板之前运行良好。在我添加 UpdatePanel 之前它运行良好;您是说在异步回发时下拉列表没有正确填充吗?无论哪种方式,我通过使用 jQuery 更改 ddl 的 change() 事件上的图像路径来解决这个问题,所以这个问题现在更多是关于好奇心。
    • 正确。在调用 page_load 函数之前,异步回发似乎不会填充 DDL(因为每次加载页面时都会调用它,而不管回发的类型如何)。 jQuery 始终是一种选择;但是,我通常会尝试将尽可能多的代码保留在代码隐藏中,这就是我在遇到这些问题时提出解决方案的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2012-01-27
    • 2011-09-05
    • 2023-03-14
    相关资源
    最近更新 更多