Заполните изображение после проблемы обратной передачи - PullRequest
3 голосов
/ 04 мая 2011

У меня следующая проблема:

При нажатии кнопки я хочу заполнить источник изображения и показать изображение внутри 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); изображение появится.

Что может быть причиной такого поведения?

1 Ответ

0 голосов
/ 05 мая 2011

Если вы хотите всегда вызывать PopulateImage(); после того, как UpdatePanel завершит обновление, вы должны сделать это, зарегистрировав функцию для выполнения после загрузки UpdatePanel.Вы можете зарегистрировать свою функцию, выполнив следующие действия в javascript при загрузке вашей страницы:

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

Я думаю, что у вас может возникнуть проблема с синхронизацией, когда вы UpdatePanel обновляете, ПОСЛЕ вашего PopulateImage() кодазапустить, чтобы он заменил его.

...