【发布时间】:2016-03-11 11:19:01
【问题描述】:
我希望有人可以帮助我解决 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 中的文本,同时我在后面的代码中执行多个事件。我原以为现在在后面的代码中执行任务时会有一个简单的“更新进度刷新”选项;但显然没有,所以我不得不这样做。
如果有人能指出哪里出了问题,或者能给我指出正确的方向,你将是我的救命稻草!
【问题讨论】:
-
您能否验证上述代码在没有更新面板的情况下是否可以正常工作?请移除更新面板进行测试并检查它是否按预期工作。然后我们将使它与更新面板一起工作。
-
嗨 Piyush,感谢您的快速回复!你的意思是说它在没有 Ajax 的情况下是否可以工作?那么答案是肯定的。如果没有更新面板和进度,事件一个接一个地执行,我得到正确的结果。实际上,只要只有一个 AsyncPostBackTrigger,它仍然适用于 Ajax - 在这种情况下,我为第一个事件获取 Ajax,而在第二个事件中没有。如果有多个 AsyncPostBackTrigger,则会出现此问题。如果触发器是“PostBackTrigger”而不是异步,则该过程也有效,但显然更新进度永远不会显示。
标签: javascript c# asp.net ajax updateprogress