我希望有人能夠幫助我處理這種奇怪的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中的文本,而我在後面的代碼中執行多個事件。我原以爲在現在的代碼中執行任務時會有一個簡單的「更新進度刷新」選項;但顯然沒有,所以我不得不這樣做。
如果有人能指出什麼是錯的,或者可以指向正確的方向,你將成爲我的救星!
請不要更新面板,請確認以上代碼是否正常工作?請刪除更新面板進行測試,並檢查它是否按預期工作。然後我們將使它與更新面板一起工作。 –
嗨Piyush,感謝您的快速響應!你的意思是說,如果它沒有完全使用Ajax就可以工作嗎?那麼答案是肯定的。沒有更新面板和進度,事件會一個接一個地執行,我會得到正確的結果。實際上,只要只有一個AsyncPostBackTrigger,它仍然適用於Ajax - 在這種情況下,我爲第一個事件獲取Ajax,而在第二個事件中獲取Ajax。如果有多個AsyncPostBackTrigger,則會發生該問題。如果觸發器是'PostBackTrigger'而不是Async,那麼這個過程也可以工作,但顯然更新過程從不出現。 – psApprentice