javascript - 回发问题后填充图像

标签 javascript asp.net ajaxcontroltoolkit

我有以下问题:

单击按钮时,我想填充图像源并在 ModalPopupExtender 中显示图像。 为了打开 ModalPopupExtender,我调用了 __doPostBack,这会导致 UpdatePanel 执行回发并显示带有其中图像的适当 View 。

 <script src="jquery-1.5.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
    window.pageLoad = function () {
        $addHandler($get('btn1'), 'click', function (e) {
            __doPostBack('pbcTest', '');
            // setTimeout("PopulateImage()", 100);
            PopulateImage();
            $find('<%=mpePopup.ClientID%>').show();
            e.preventDefault();
        });
    }

    function PopulateImage() {
        $(".testImage").attr("src", "6.jpg");
    }

</script>

<ajaxtoolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" CombineScripts="false">
    </ajaxtoolkit:ToolkitScriptManager>
    <button id="btn1"> Click</button>
    <asp:LinkButton ID="lbTest" runat="server" Text="show popup" Style="display: none;" />
    <ajaxtoolkit:ModalPopupExtender runat="server" ID="mpePopup" TargetControlID="lbTest"
        PopupControlID="pnlPopup" BackgroundCssClass="modalBackground" CancelControlID="lbClose" />
    <asp:Panel runat="server" ID="pnlPopup" CssClass="modalPopup">
        <asp:LinkButton runat="server" ID="lbClose">Close</asp:LinkButton>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:MultiView runat="server" ID="mvPopup">
                    <asp:View ID="View1" runat="server">
                        <img class="testImage" />
                    </asp:View>
                </asp:MultiView>
                <cs:PostBackControl runat="server" ID="pbcTest" OnCallBack="pbcTest_CallBack" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </asp:Panel>

 protected void pbcTest_CallBack(object sender, CallBackEventArgs e)
    {
        mvPopup.ActiveViewIndex = 0; 
    }

如果在 __doPostBack 之后我立即调用 PopulateImage(),图像是空的(尽管 PopulateImage() 被调用并且图像出现一段时间,但在消失之后,可以在 firebug 中看到)。

但是如果我设置一个超时 setTimeout("PopulateImage()", 100); 图像就会出现。

这种行为的原因可能是什么?

最佳答案

如果您想在 UpdatePanel 完成刷新后始终调用 PopulateImage();,您应该通过注册在 UpdatePanel 之后执行的函数来实现 已加载。加载页面时,您可以通过在 javascript 中执行以下操作来注册您的函数:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(PopulateImage);

我认为您可能遇到了同步问题,您的 UpdatePanel 刷新发生在您的 PopulateImage() 代码运行之后,因此它会替换它。

关于javascript - 回发问题后填充图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5888021/

相关文章:

javascript - 没有时间戳参数的 jQuery 追加?

javascript - HighCharts - 选择一个点时禁用鼠标悬停

c# - 将跟踪 id/span id 设置为实际的关联 ID,以使用 OpenTelemetry for c# 跟踪请求

asp.net - ASP.NET 中的 AutoCompleteExtender 附加信息

asp.net - AjaxControlToolkit CalendarExtender - 日期/时间错误?

javascript - 如何在 Ant Design Modal Component Body 旁边启用滚动条?

javascript - MsGesture,在 metro 风格应用中向不同方向滑动

css - 如何根据应用程序设置覆盖 css 使表单更改颜色

c# - 在 Asp.net 上检测浏览器关闭

asp.net - 通过按钮触发 AsyncFileUpload 控件