2010-10-19 66 views
16

我在找不到類似的東西。用Javascript部分回發

在ASP.NET中,有什麼方法可以在UpdatePanel中使用Javascript進行部分回發嗎?
我試過__doPostBack(),但它做了一個完整的回發。
我可以用一個虛擬按鈕欺騙它,然後用click()來處理部分回發,但我想要比欺騙更優雅的方式。

謝謝。

編輯:我發現這disturbedbuddha.wordpress.com/2007/11/26/ ......但我不能讓它的工作=(
我喜歡這種方法工作;它非常適合我 到目前爲止,我可以利用這最後的方法就是做!獲得對定時器的引用當定時器最初被禁用時,啓動定時器似乎不會引起回發,但是,如果沒有Ajax,如果我最初啓用了定時器,它會以間隔時間間隔發回;爲什麼不能Ajax調用導致它?

+1

我已經完成了這個過去。怎麼樣?虛擬的方式。 :)隱藏按鈕,使其成爲異步觸發器,然後觸發單擊事件。我很想知道更好的方法。問題是updatepanel需要一個觸發器,通過一個'postback-able'(按鈕,ddl等)控件。 – RPM1984 2010-10-19 04:51:54

回答

31

您可以使用帶有UpdatePanel的AsyncPostBackTrigger來執行此操作。因爲您需要可以觸發事件的內容,所以使用按鈕非常簡單,並且在隱藏時可以很好地工作

如果這是你的標記:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load"> 
    <ContentTemplate> 
     <!-- Contents... --> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" /> 

當你需要的面板進行更新,你只需要調用:

__doPostBack('<%=ReloadThePanel.ClientID %>', null); 

這會使ASP.NET認爲ReloadThePanel被點擊和由觸發器自動生成的JavaScript將處理剩下的事情。

編輯

你可以做的UpdatePanel的純JavaScript更新沒有任何觸發器或隱藏按鈕。您只需要調用__doPostBack並將客戶端ID作爲第一個參數。

__doPostBack('<%=UpdatePanel1.ClientID %>', null); 
+0

那我可以問你嗎?我只想知道這個好處。如果我省略部分,並且在JavaScript中,我只是簡單地觸發按鈕的單擊事件,是不是會產生相同的效果?爲什麼使用部分? – BeemerGuy 2010-10-28 22:48:05

+0

如果您省略觸發器部分,只需「單擊」按鈕,它將回發整個頁面。如果指定觸發器,ASP.NET將生成JavaScript以「捕捉」點擊並通過AJAX進行更新,而不是整個頁面提交。 – 2010-10-29 00:55:20

+0

但是,並不是說Ajax是如何工作的?這就是爲什麼我對此感到困惑。如果我實際上在更新面板中顯示一個按鈕,並實際點擊它,是不是會將該部分回傳?爲什麼通過Javascript的特定點擊觸發不會像真正的點擊一樣被捕獲? – BeemerGuy 2010-10-29 17:19:33

2

我用@MatthewJacobs'的答案,但我發現,調用__doPostBack造成了IE11運行時異常。我發現調用__doPostBack可以被下面的JavaScript調用替代,該調用在我測試的兩個瀏覽器(IE11和Chrome 52)上都能正常工作。

Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
    [ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null 
); 

有關更多詳細信息,請參見Sys.WebForms.PageRequestManager.beginAsyncPostBack Method