updatepanel中的asp.net linkbutton不会触发

时间:2022-08-25 17:30:30

I have a asp.net web application. In my .aspx page I have a update panel in which I have 3 asp:LinkButton that should make a call to a c# code behind. The problem is that the onclick doesn't work.

我有一个asp.net Web应用程序。在我的.aspx页面中,我有一个更新面板,其中我有3个asp:LinkBut​​ton应该调用后面的c#代码。问题是onclick不起作用。

Here is how the code looks:

以下是代码的外观:

<div id="div1">
                <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                    <ContentTemplate>
                        <ul>
                            <li><asp:LinkButton ID="lnk_1" runat="server" OnClick="lnk1_Click">Link1</asp:LinkButton></li>
                            <li><asp:LinkButton ID="lnk_2" runat="server" OnClick="lnk2_Click">Link2</asp:LinkButton></li>
                            <li><asp:LinkButton ID="lnk_3" runat="server" OnClick="lnk3_Click">Link3</asp:LinkButton></li>
                        </ul> 
<div> some more code here </div>
</ContentTemplate>
                    <Triggers>
                        <asp:PostBackTrigger ControlID="lnk_1" />
                        <asp:PostBackTrigger ControlID="lnk_2" />
                        <asp:PostBackTrigger ControlID="lnk_3" />
                    </Triggers>
                </asp:UpdatePanel>
            </div>

What is wrong with the code? I have also tried using AsyncPostBackTrigger but still doesn't work.

代码有什么问题?我也尝试过使用AsyncPostBackTrigger,但仍然无法正常工作。

The code behind is not invoked at all.

根本没有调用后面的代码。

I have also tried to search on Google but couldn't find a solution.

我也尝试在Google上搜索,但找不到解决方案。

1 个解决方案

#1


5  

You're very close. Couple of things:

你很近。几件事:

  • Your triggers should be AsyncPostBackTriggers as you said you tried.
  • 您尝试过的触发器应该是AsyncPostBackTriggers。
  • Your triggers need an event name.
  • 您的触发器需要一个事件名称。
  • Suggestion: This won't prevent your events from firing, but unless you want EVERY postable event to cause a postback, add UpdateMode="Conditional" to your UpdatePanel.
  • 建议:这不会阻止您的事件被触发,但除非您希望每个postable事件都引发回发,否则请将UpdateMode =“Conditional”添加到UpdatePanel。

Here is a working example.

这是一个有效的例子。

Web Form - WebForm1.aspx:

Web表单 - WebForm1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="AspDotNetStorefront.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager runat="server"></asp:ScriptManager>
            <div id="div1">
                <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <ul>
                            <li><asp:LinkButton ID="lnk_1" runat="server" OnClick="lnk1_Click">Never clicked</asp:LinkButton></li>
                        </ul> 
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="lnk_1" EventName="Click" />
                    </Triggers>
                </asp:UpdatePanel>
            </div>    
        </form>
    </body>
</html>

CodeBehind - WebForm1.aspx.cs:

CodeBehind - WebForm1.aspx.cs:

using System;

namespace AspDotNetStorefront
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        private static int _clickedCount = 0;

        protected void lnk1_Click(object sender, EventArgs e)
        {
            ++_clickedCount;
            var suffix = _clickedCount <= 1 ? "time" : "times";
            lnk_1.Text = string.Format("Clicked {0} {1}", _clickedCount, suffix);
        }
    }
}

#1


5  

You're very close. Couple of things:

你很近。几件事:

  • Your triggers should be AsyncPostBackTriggers as you said you tried.
  • 您尝试过的触发器应该是AsyncPostBackTriggers。
  • Your triggers need an event name.
  • 您的触发器需要一个事件名称。
  • Suggestion: This won't prevent your events from firing, but unless you want EVERY postable event to cause a postback, add UpdateMode="Conditional" to your UpdatePanel.
  • 建议:这不会阻止您的事件被触发,但除非您希望每个postable事件都引发回发,否则请将UpdateMode =“Conditional”添加到UpdatePanel。

Here is a working example.

这是一个有效的例子。

Web Form - WebForm1.aspx:

Web表单 - WebForm1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="AspDotNetStorefront.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager runat="server"></asp:ScriptManager>
            <div id="div1">
                <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <ul>
                            <li><asp:LinkButton ID="lnk_1" runat="server" OnClick="lnk1_Click">Never clicked</asp:LinkButton></li>
                        </ul> 
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="lnk_1" EventName="Click" />
                    </Triggers>
                </asp:UpdatePanel>
            </div>    
        </form>
    </body>
</html>

CodeBehind - WebForm1.aspx.cs:

CodeBehind - WebForm1.aspx.cs:

using System;

namespace AspDotNetStorefront
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        private static int _clickedCount = 0;

        protected void lnk1_Click(object sender, EventArgs e)
        {
            ++_clickedCount;
            var suffix = _clickedCount <= 1 ? "time" : "times";
            lnk_1.Text = string.Format("Clicked {0} {1}", _clickedCount, suffix);
        }
    }
}