我希望有人能帮助我解决这种奇怪的 asp.net 行为。我有一个带有两个链接按钮作为触发器的 UpdatePanel 控件。触发器单独工作正常。但是当我有一个函数一个接一个地调用"onclick"事件(顺序无关紧要)时,第二个链接按钮的"onclick"事件不会执行。如果 UpdatePanel 中只存在一个触发器,则整个过程将成功执行 - 但 Ajax 进度面板显然不会显示第二个事件 - 这违背了使它比应有的更复杂的整个目的。
更令人费解的是,第二个控件的"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 中的文本,同时我在代码后面执行多个事件。我本以为现在在代码后面执行任务时会有一个简单的"更新进度刷新"选项;但显然没有,所以我被迫这样做。
如果有人能指出问题所在,或者能指出我正确的方向,你将成为我的救命恩人!
尝试下面,添加你的javascript函数,如下所示,它应该可以工作。
//On Page Load.
CallMe();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
CallMe();
}
function CallMe()
{
//code
}