2011-05-04 25 views
3

我有以下問題:填充圖像回傳問題

在按鈕點擊我要填充的圖像源,並顯示一個ModalPopupExtender內的圖像。 爲了打開ModalPopupExtender我呼籲__doPostBack導致UpdatePanel執行回發並顯示適當的視圖與其中的圖像。

<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()被稱爲與圖像出現了一段時間,但消失後,有可能在螢火蟲看看)。

但如果我把超時setTimeout("PopulateImage()", 100);圖像顯示出來。

這種行爲的原因是什麼?

回答

0

如果你想要在UpdatePanel完成刷新後總是調用PopulateImage();,你應該在UpdatePanel載入後註冊要執行的函數。當加載你的頁面,您可以通過在JavaScript執行以下操作註冊的功能:

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

我想你可能會遇到在那裏後,您PopulateImage()代碼運行,因此替換它,你UpdatePanel刷新發生同步問題。

+0

謝謝你,我認爲你是對的。其實我已經添加了Sys.WebForms.PageRequestManager.getInstance()。add_endRequest(EndRequestHandler);它工作正常。 – Elistan 2011-05-09 19:22:30