2012-08-15 30 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