2009-09-22 129 views
0

我在使用javascript(jQuery)更新ASP:UpdatePanel時遇到問題。這是我的。ASP.NET:使用jQuery手動更新UpdatePanel

我正在使用隱藏的按鈕技巧,因爲我似乎無法獲得__doPostBack技巧的更新面板的ClientID)。

<asp:UpdatePanel runat="server" ID="pnlUpdate"> 

<Triggers> 
<asp:AsyncPostBackTrigger ControlID="btnUpdate" /> 
</Triggers> 

<ContentTemplate> 

<asp:UpdateProgress runat="server" AssociatedUpdatePanelID="pnlUpdate" DynamicLayout="false" DisplayAfter="100"> 
<ProgressTemplate> 
<img alt="Laddar..." src="img/loader.gif" width="16" height="11"/> 
</ProgressTemplate> 
</asp:UpdateProgress> 

<div style="display:none;"> 
<asp:Button runat="server" ID="btnUpdate" CommandName="Refresh" CommandArgument='<%# Eval("Id") %>'/> 
</div> 

<asp:Repeater runat="server" Id="rptrEnquiry"> 
... 
</asp:Repeater> 


<%= DateTime.Now.ToString() %> 

<a href="javascript:jQuery('#<%= btnUpdate.ClientID %>').trigger('click')&&undefined;">Fire!</a> 

</ContentTemplate> 

</asp:UpdatePanel> 

在處理該btnUpdate(在GridView RowCommand)的rptrEnquiry是反彈壓btnUpdate當代碼隱藏。

如果我直接按按鈕(而不是隱藏的)一切完美(updateprogess顯示和更新的日期和中繼器更新。

但如果我點擊消防鏈接,通過JavaScript觸發按鈕只有日期是更新,但是的UpdateProgress沒有顯示和轉發不反彈。雖然我調試可以看到,反彈代碼被執行,但它的效果是不是在更新。

回答

6

好吧,所以我通過徹底重建整個事情來解決我的問題。一些經驗教訓,可能會幫助別人:

我有一個gridview中的updatepanel時,我sepaarated更新面板部分到它自己的控制大部分我的問題解決了,如不being能夠引用pnlUpdate。

http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/非常有幫助。

更新面板中的更新在PreRender中進行控制。通過使用__EVENTTARGET,只更新我們感興趣的面板。

protected void pnlUpdate_PreRender(object sender, EventArgs args) 
{ 
    if (Request["__EVENTTARGET"] == pnlUpdate.ClientID) 
    { 
     PreBind(); 

     switch(Request["__EVENTARGUMENT"]) 
     { 
      case "toggle": 
       Toggle(); 
       break; 
      case "purchase": 
       Purchase(); 
       break; 
      case "update": 
       /* nop */ 
       break; 
     } 

     Bind(); 
    } 
} 

爲了讓__EVENTTARGET有適當的clientId(它是空字符串,如果使用按鈕),我使用javascript需要對面板更新的火:

<a href="javascript:__doPostBack('<%= pnlUpdate.ClientID %>','toggle');"> 
<img runat="server" ID="imgToggle" src="~/img/grid_plus.gif" title="Expandera" alt="" width="14" height="14"/> 
</a> 
3

你有沒有嘗試過這樣的事情?(摘自從Easily refresh an UpdatePanel, using JavaScript)。

there’s an easy method for triggering a postback targeted at the UpdatePanel: __doPostBack().

As long as the event target of a __doPostBack() call is an async trigger of an UpdatePanel, the ASP.NET AJAX framework will intercept the postback and fire a partial postback instead.

<a href="#" onclick="__doPostBack('<%= pnlUpdate.ClientID %>', '');"/> 
+0

我試過這種方法,但我有一個gridview中的updatepanel,這給了我「編譯錯誤:pnlUpdate不在當前上下文」當試圖獲得ClientID – 2009-09-22 15:03:53

+0

有點奇怪,updatepanel是唯一的控件,我在gridview中,我可以'在當前的情況下找到? – 2009-09-22 15:11:51

+0

您必須將__doPostBack()錨標記放入與UpdatePanel相同的GridView模板中,才能看到pnlUpdate。 – jrummell 2009-09-22 15:46:56