2016-03-11 100 views
0

我希望有人能夠幫助我處理這種奇怪的asp.net行爲。我有一個帶兩個linkbutton作爲觸發器的UpdatePanel控件。觸發器單獨工作正常。但是當我有一個接一個地調用一個'onclick'事件的函數時(順序無關緊要),第二個linkbutton的'onclick'事件不會執行。如果在UpdatePanel中只有一個觸發器存在,整個過程就會成功執行 - 但Ajax進度面板顯然不會顯示第二個事件 - 這使得這個過程變得複雜得多。如果它在UpdatePanel中用作AsyncPostBackTrigger觸發器,則不會觸發ASP.net linkbutton'onclick'

更令人費解的是,第二個控件的'onclientclick'事件執行得很好 - 只有'onclick'事件;它執行部分回發不執行。

請參考我下面的代碼:

標記:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="True"> 
    <ContentTemplate> 
     <!-- Content template here --> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="lButton1" EventName="Click"/> 
     <asp:AsyncPostBackTrigger ControlID="lButton2" EventName="Click" /> 
     </Triggers> 
</asp:UpdatePanel> 

<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" runat="server" DisplayAfter="0"> 
     <ProgressTemplate> 
      <!-- Progress template here --> 
     </ProgressTemplate> 
</asp:UpdateProgress> 


<asp:LinkButton ID="lButton1" runat="server" onclick="Event1" OnClientClick="clientEvent1();">Go!</asp:LinkButton> 
<asp:LinkButton ID="lButton2" runat="server" onclick="Event2" OnClientClick="clientEvent2();">Go2</asp:LinkButton> 

代碼背後:

public void Event1(object sender, EventArgs e) 
{ 
    // Actions here 

    ScriptManager.RegisterClientScriptBlock(this, GetType(),"triggerEvent2", "triggerEvent2();", true); 
} 

public void Event2(object sender, EventArgs e) 
{ 
    // Actions here 
} 

的Javascript:

function triggerEvent2() { 
    var btn = document.getElementById('<%=lButton2.UniqueID%>'); 
    btn.click(); 
} 

從上面的代碼,最後部分'btn.click();'從來沒有執行 - 但我放入函數triggerEvent2()的任何其他東西都執行正常(並且onclientclick事件執行!)它告訴我至少該進程正在工作。

如果有人想知道我在做什麼,我只想更新UpdateProgress中的文本,而我在後面的代碼中執行多個事件。我原以爲在現在的代碼中執行任務時會有一個簡單的「更新進度刷新」選項;但顯然沒有,所以我不得不這樣做。

如果有人能指出什麼是錯的,或者可以指向正確的方向,你將成爲我的救星!

+0

請不要更新面板,請確認以上代碼是否正常工作?請刪除更新面板進行測試,並檢查它是否按預期工作。然後我們將使它與更新面板一起工作。 –

+0

嗨Piyush,感謝您的快速響應!你的意思是說,如果它沒有完全使用Ajax就可以工作嗎?那麼答案是肯定的。沒有更新面板和進度,事件會一個接一個地執行,我會得到正確的結果。實際上,只要只有一個AsyncPostBackTrigger,它仍然適用於Ajax - 在這種情況下,我爲第一個事件獲取Ajax,而在第二個事件中獲取Ajax。如果有多個AsyncPostBackTrigger,則會發生該問題。如果觸發器是'PostBackTrigger'而不是Async,那麼這個過程也可以工作,但顯然更新過程從不出現。 – psApprentice

回答

0

請在下面嘗試,如下所示添加您的javascript函數,它應該可以工作。

//On Page Load. 
CallMe(); 

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

function EndRequestHandler(sender, args) { 
    CallMe();   
} 

function CallMe() 
{ 
    //code 
} 
+0

我認爲你更接近答案。添加這個可以讓這個過程奏效!但「更新進度」未在「CallMe()」事件中觸發。我在那個函數中的作用是模擬第二個鏈接按鈕上的點擊事件。因此,添加,這是沒有第二個linkBut​​ton上的AsyncPostBackTrigger相同... – psApprentice

+0

嗯,這是JavaScript的功能。當您單擊服務器端控件時,更新進度將生效。 –

+0

好的,我可能已經達到了我的webdev理解的極限。不是一個linkBut​​ton服務器端控件?如果我單擊每個按鈕,它們都會觸發更新進度。在編程方式調用點擊事件和實際點擊按鈕的用戶之間是否有功能差異? – psApprentice