ASP.net 链接按钮“onclick”如果用作UpdatePanel中的AsyncPostBackTrigger触发

ASP.net linkbutton 'onclick' does not trigger if it is used as an AsyncPostBackTrigger trigger in UpdatePanel

本文关键字:UpdatePanel 中的 触发 AsyncPostBackTrigger 如果 链接 net 按钮 onclick ASP      更新时间:2023-09-26

我希望有人能帮助我解决这种奇怪的 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
}