【问题标题】:ASP.net linkbutton 'onclick' does not trigger if it is used as an AsyncPostBackTrigger trigger in UpdatePanelASP.net 链接按钮“onclick”如果在 UpdatePanel 中用作 AsyncPostBackTrigger 触发器,则不会触发
【发布时间】: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


【解决方案1】:

试试下面,添加你的javascript函数如下,它应该可以工作。

//On Page Load.
CallMe();

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

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

function CallMe()
{
    //code
}

【讨论】:

  • 我认为您更接近答案。添加这个使过程工作!但是“CallMe()”事件不会触发更新进度。我在该功能中所拥有的是模拟第二个链接按钮上的点击事件。因此,添加后,它与第二个 linkBut​​ton 上没有 AsyncPostBackTrigger 相同...
  • 这是javascript函数。单击服务器端控件时,更新进度有效。
  • 好吧,我可能已经达到了我对 webdev 理解的极限。 linkBut​​ton 不是服务器端控件吗?如果我单击每个按钮,它们都会触发更新进度。以编程方式调用点击事件和用户实际点击按钮之间是否存在功能差异?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多