Update面板中的自定义ListView没有刷新

时间:2014-11-02 16:08:35

标签: asp.net

我试图解决这个问题。 我在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);
    }

1 个答案:

答案 0 :(得分:0)

仅刷新更新图像的步骤

步骤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:在Code-Behind中

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();
}