【问题标题】:custom ListView inside Update panel not refreshing更新面板内的自定义 ListView 不刷新
【发布时间】:2014-11-11 08:08:01
【问题描述】:

我正在尝试解决这个问题。 我在 UpdatePanel 中有一个 Accordion。在 Accordion 控件中,我动态地创建最多四个 AccordionPanes,每个都有一个自定义 ListView,显示从数据库获取的一些图像预览。每个预览都由一个 160x120 的 ImageButton 组成。当用户单击其中一个按钮时,会打开一个弹出窗口,其中包含真实大小的图像(通过 Seadragon 控件);他现在可以旋转图像并将其保存回数据库。现在,保存图像后,我关闭弹出窗口并通过在包含 Accordion 的 UpdatePanel 内的隐藏按钮上生成单击事件来提交回发,但即使我可以单步执行隐藏按钮事件代码,也不会刷新地方。隐藏按钮是我尝试过的最后一个(也是最有效的)解决方案,但没有成功。我错过了什么? (绝对最佳的解决方案是刷新唯一更改的图像,因为有时 ListView 包含多个预览)。

这是

    <div>
    <table class="style8">
        <tr>
            <td class="style2">
                <asp:UpdatePanel ID="usersPanel" runat="server" >
                    <ContentTemplate>
                        <cc1:c1treeview ID="tvUsers" runat="server" 
                            onselectednodeschanged="tvUsers_SelectedNodesChanged" AutoPostBack="True" 
                            onnodecheckchanged="tvUsers_SelectedNodesChanged">
                        </cc1:c1treeview>
                    </ContentTemplate>
                </asp:UpdatePanel>
                <asp:UpdatePanel ID="imagesPanel" runat="server" UpdateMode="Always" >
                    <ContentTemplate>
                        <asp:Button ID="hiddenImageRefresh" runat="server" Text="Refresh" 
                    style="display:none;" onclick="hiddenImageRefresh_Click" />
                        <ajaxToolkit:Accordion ID="accImages" runat="server" >
                        </ajaxToolkit:Accordion>
                    </ContentTemplate>
                </asp:UpdatePanel>
            </td>
        </tr>
    </table>
</div>

这是隐藏按钮单击事件中包含的代码,代码在弹出窗口关闭时定期运行。它只是提取用户代码(促销)并重新绑定数据(LoadImages)

    protected void hiddenImageRefresh_Click(object sender, EventArgs e)
    {
        string promo = "";

        if(Session[SessionVariables.CurrentPromoter] != null)
            promo = Session[SessionVariables.CurrentPromoter].ToString();

        LoadImages(promo, ddlImageType.SelectedValue);
    }

【问题讨论】:

  • 你是如何触发按钮点击的?在代码隐藏hiddenImageRefresh_Click 方法中放置断点并检查您是否收到控制权。
  • 按钮点击是由弹出窗口中的客户端脚本触发的。下面是保存按钮的代码隐藏:
  • protected void bSave_Click(object sender, EventArgs e) { SaveImage(); ClientScriptManager csm = Page.ClientScript; csm.RegisterStartupScript(Page.GetType(), "closeScript", "closePopup(true);", true); }
  • 你能告诉我们按钮点击javascript吗,会有问题。你在服务器端获得断点吗?
  • 这是客户端脚本调用的 javascript : ' function closePopup(refreshParent) { if (refreshParent != null) { var bRefresh = window.opener.document.getElementById('hiddenImageRefresh'); if (bRefresh == null) alert('Tag di refresh non trovato !');否则 bRefresh.click(); } window.close(); }'。代码隐藏事件 hiddenImageRefresh_Click 中的代码被调用,并且所有控件的值都到位(即 ddlImageType.SelectedValue)。

标签: asp.net


【解决方案1】:

仅刷新更新图像的步骤

第 1 步:在 JavaScript 中

//Take one global variable
var selectedImageId="";

步骤#2:在 JavaScript 中

//set above var with image id, When user clicks on the ImageButton, which is inside openPopup function
selectedImageId = this.id;

步骤#3:在代码隐藏中

protected void bSave_Click(object sender, EventArgs e) {
    //SaveImage();

    #region here get the imageUrl that needs to be updated and send as parameter in closePopup js function

    var timeStamp = dImgTag.ToString("yyyyMMdd HH:mm:ss.fff") ;
    var promoter = riga["PROMOTER"].ToString();
    var pv = riga["PV"].ToString();
    var imageUrl = string.Format("../Handlers/ImageLoader.ashx?id={0}&promo={1}&pv={2}", timeStamp, promoter, pv);

    #endregion

    ClientScriptManager csm = Page.ClientScript;
    csm.RegisterStartupScript(Page.GetType(), "closeScript", "closePopup(true,'"+ imageUrl +"');", true);
}

步骤#4:在 JavaScript 中

function closePopup(refreshParent, imageUrl) {
    if (refreshParent) {
        //get the selectedImage and set the source with new url 
        var selectedImage = window.opener.document.getElementById(selectedImageId);
        selectedImage.src = imageUrl;
    }
    window.close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多