2012-08-15 15 views
0

我有一個jQuery重的ASP.net頁面。在asp.net中的async ajax更新後加載jquery

這個頁面我有一個gridview內updatepanel,所以我可以做一個異步更新。

<asp:GridView ID="gvMail" runat="server" GridLines="None" 
AutoGenerateColumns="false" Width="100%" OnRowDataBound="mail_RowDataBound" 
CssClass="gridview" DataKeyNames="id"> 


<HeaderStyle HorizontalAlign="Left" /> 
<RowStyle ForeColor="#0072BC" HorizontalAlign="Left" CssClass="draggable" /> 

</asp:GridView> 

</ContentTemplate> 
</asp:UpdatePanel> 

<!-- Hidden Link button for Async call back --> 
<asp:UpdatePanel ID="updatePanel2" runat="server"> 
<ContentTemplate> 
<asp:LinkButton ID="btnLoadData" onclick="btnLoadData_Click" runat="server" 
Text="Fill GridView" CssClass="none"></asp:LinkButton> <!-- hidden--> 

<a href="javascript: AsyncUpdateGridView()">A sync update</a> 
<!-- testing purposes only--> 

</ContentTemplate> 
</asp:UpdatePanel> 

所以用這個小黑客我點擊興田LinkBut​​ton的更新工作正常GridView的。最終,僅調用隱藏鏈接按鈕的_dopostback方法的AsyncUpdateGridView()將使用Javascript。

我的問題是,我的GridView有列是Jquery DatePickers和Jquery花式下拉框。它們都含有此javascript調用:

function OnLoadPage() { 
      $(".jqueryselector").selectbox({ 
       effect: "fade" 
      }); 

      $(".jquerydatepicker").datepicker({ dateFormat: 'dd-mm-yy' }); 
     } 

     $(document).ready(function() { 
      OnLoadPage(); 
     } 

我之所以作出OnLoadPage()函數是因爲我打過電話後,我做了更新後的_doPostBack通話。

但是這並不奏效。所以現在當頁面加載時,所有的jQuery的日期選擇器,下拉框和我在GridView中工作的其他奇特的東西。但在異步回調後,它會重新加載所有默認的HTML。

+0

您是否嘗試過在你的代碼調用[ScriptManager.RegisterStartupScript方法](http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerstartupscript.aspx)落後時發佈帖子會重新發布您的** OnLoadPage **函數? – 2012-08-15 01:28:06

回答

1

$(document).ready在ajax面板調用完成並且更新了html塊之後不會執行。您需要註冊由asp.net ajax爲此提供的事件。您可以使用begin_requestend_request來執行一些javascript之前和之後的ajax調用,如果您希望在完成ajax調用之後調用javascript函數,則需要使用end_request,而對於之前的ajax調用,您需要begin_request,關於它們的更多信息請參見here

function OnLoadPage() { 
     $(".jqueryselector").selectbox({ 
      effect: "fade" 
     }); 

     $(".jquerydatepicker").datepicker({ dateFormat: 'dd-mm-yy' }); 
    } 


Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 


Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 


function BeginRequestHandler(sender, args) 
{ 

} 

function EndRequestHandler(sender, args) 
{ 
    OnLoadPage(); 
} 
+0

OnLoadPage()是一個JavaScript函數..所以我不能在EndRequestHndler中調用它..? – michael 2012-08-15 02:05:02

+0

是的,你可以稱它爲100%。我已經更新了我的答案並給出了msdn鏈接,http://msdn.microsoft.com/zh-cn/library/bb397432.aspx – Adil 2012-08-15 02:07:23

+0

對不起,誤解開始。工作很棒:) – michael 2012-08-15 02:34:07