繁体   English   中英

Asp:更新面板内的按钮单击事件未触发

[英]Asp:Button click event inside update panel not firing

在发生部分更新后,什么会导致asp Button无法触发?

<asp:UpdatePanel ID="upPan" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <asp:Button ID="btnSave" ClientIDMode="Static" runat="Server" Text="Save" CausesValidation="false" />
  </ContentTemplate>
</asp:UpdatePanel>
  • 第一次在更新面板中触发任何按钮时,以下例程按此顺序触发。
  • 发生回发后,再次触发按钮会导致回发, LoadPreRenderComplete事件都会触发,但会跳过click事件。

VB

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.PageLoad
  //Runs everytime
End Sub

Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
 //Doesn't fire after first postback.
End Sub

Protected Sub Page_PreRenderComplete(sender As Object, e As EventArgs) Handles Me.PreRenderComplete
  //Runs everytime
End Sub

失败的决议

解决此问题的建议包括:

  • ChildrenAsTriggers= "True"这已经是UpdatePanel的默认行为,不提供任何更改。
  • <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />默认情况下,默认情况下,面板的子控件会导致异步回发,并且声明触发器是多余的。

成功的解决方案

如果我只是将asp:Button更改为asp:LinkButton ,问题就解决了。


摘要

回发正在发生,但当发件人是asp:Button控件时,错过了click事件。

谁能解释会导致这种行为的原因?

首先,道歉我的回答是在C#中。 这也不是一个答案,因为我无法复制你的问题。 Buttons和LinkBut​​tons之间的区别在于Button使用提交行为,而LinkButton使用javascript回发。 您可以尝试在Button上放置UseSubmitBehavior="false" ,这样可以使它像LinkButton一样工作。

这是我完整的测试代码。 作为C#我不得不做一些改动,因为它没有Handles - 这可能是问题的关键,因为C#和VB处理事件的方式略有不同

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test3.aspx.cs" Inherits="Test3" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>

            <asp:ScriptManager ID="PageScriptManager" runat="server" />
            <asp:UpdatePanel ID="upPan" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Button ID="btnSave" ClientIDMode="Static" runat="Server" Text="Button" CausesValidation="false" OnClick="btnSave_Click" />
                    <asp:LinkButton ID="lnkButton" ClientIDMode="Static" runat="Server" Text="Link Button" CausesValidation="false" OnClick="btnSave_Click" />
                    <asp:TextBox ID="txtBox" runat="server" TextMode="MultiLine" Rows="3" />
                </ContentTemplate>
            </asp:UpdatePanel>

        </div>
    </form>
</body>
</html>

代码隐藏:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        txtBox.Text = "Page_Loaded";
    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        txtBox.Text += "\n" + DateTime.Now.ToString("mm:ss:fff");
    }

    protected void Page_PreRenderComplete(object sender, EventArgs e)
    {
        txtBox.Text += "\nPreRenderComplete";
    }
}

单击按钮(或LinkBut​​ton)工作并每次更新TextBox:

Page_Loaded
55:54:185
PreRenderComplete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM