ASP.NET中的链接按钮点击事件未触发

4
<asp:LinkButton ID="lbDownloadFile" name = "lbDownloadFile" runat="server" CausesValidation="false" 
                            onclick="lbDownloadFile_Click" />

我有一个链接按钮,点击后:
protected void lbDownloadFile_Click(object sender, EventArgs e)
{    //here is my debug pointer/breakpoint
    .........................
}

但是这个事件没有触发。我的Page_Load()事件正在触发。如何解决这个问题?
protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        if (Session[Antrage_AnfrageSessionNames.AgntNr] == null)
        {
            Response.Redirect("../UserSessionError.aspx");
        }

        try
        {
            if (Request.QueryString["Kundennummer"].ToString() != null)
            {
                //If kundennummer exists in QueryString then stores it to further use 
                kundennummer = Request.QueryString["Kundennummer"].ToString();                    
            }
        }
        catch
        {
            kundennummer = string.Empty;
        }
    }
}

编辑:

我将添加代码,这是FireFox firebug根据LinkButton显示的内容。 enter image description here

我认为自动生成的href是主要的问题。


不是的。我没有把它放在第一位。onClientClick后来才写进去,想试试它是否有效。 - Abdur Rahim
3
“...而不是这个事件,我的Page_Load()事件正在触发…” - 这是正常的ASP .NET WebForms页面生命周期的一部分…每次发生postback时都会调用Page Load。在PageLoad之后,您的事件应该会触发… 但是,您是否在Page Load中执行了任何可能阻止此操作的操作? - Belogix
1
你是否正在GridView或类似结构中创建此LinkButton?这些结构中控件的事件处理程序并不像你想象的那样工作... - Steve's a D
页面加载事件已添加。如果您想了解,请询问。 - Abdur Rahim
"OnClientClick="lbDownloadFile_Click"" 不是事实。我已经尝试将其删除。 - Abdur Rahim
显示剩余18条评论
3个回答

4

@belogix 的评论很好。

这是正常的ASP .NET WebForms页面生命周期的一部分...每次Postback发生时都会调用Page Load。在PageLoad之后,您的事件应该触发...但是,您在Page Load中是否做了任何阻止此操作的事情?

我认为您的Page load方法可能有问题。也许您的链接按钮是从页面加载事件重新加载的。

样本错误

如果您同时在GridView中使用此链接按钮,则正在执行以下操作:

  • 编写Grid绑定方法

  • 然后在page load事件中调用grid bind方法

您的代码现在看起来像:

Page_load()
{
// called here Grid bind method
} 

现在,每次页面刷新都会重新加载网格。
解决方案:
现在您需要设置!IsPostBack,然后在!IsPostBack中调用网格绑定方法。
代码如下:
Page_load()
{
if(!IsPostBack)
{
// called here Grid bind method

}
} 

这是你的问题。同时这也是我的猜测。

请告诉我是否没有使用任何控件(Gridview,listview等)


编辑

如果我在页面加载事件上不写任何代码,你的代码对我有效。

请看

Default.aspx

 <asp:LinkButton ID="lbDownloadFile" Text="he he he" name="lbDownloadFile" runat="server" CausesValidation="false" OnClientClick="lbDownloadFile_Click"
        OnClick="lbDownloadFile_Click" />

服务器端的代码是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      // Empty code 
    }

    protected void lbDownloadFile_Click(object sender, EventArgs e)
    {
    }
}

这对我来说很好,所以在页面加载事件中您错过了任何内容。

*OnClientClickonclick没有任何问题。问题出现在页面加载事件上。

请发布您的pageload代码,否则我们无法解决它。:)

编辑2

  • 请检查链接按钮是否在表单元素之外。该链接按钮应位于表单元素内部

  • 而且您的页面加载事件应该是

protected void Page_Load(**object sender, EventArgs e**) { //Code }

而不是

protected void Page_Load(){}

您错过了。
object sender, EventArgs e

已添加 Page_Load 事件。请检查是否能提供帮助。 - Abdur Rahim
@AbdurRahim,请查看我的第二次编辑。 - user3559224
@AbdurRahim,抱歉我不太明白你的意思,“转换为Web应用程序”是什么意思?难道它不是Web应用程序吗? - user3559224
控件位于表单元素内。不,这是一个网站。 - Abdur Rahim
让我们在聊天室中继续这个讨论:http://chat.stackoverflow.com/rooms/52108/discussion-between-user256103-and-abdur-rahim - user3559224
显示剩余5条评论

1

我已经创建了演示项目,并复制了你写的相同代码。它可以正常工作。

  <asp:LinkButton ID="lbDownloadFile" name = "lbDownloadFile" Text="Click me" runat="server" CausesValidation="false" OnClientClick="lbDownloadFile_Click"
                            onclick="lbDownloadFile_Click" />

在代码后台文件中。
  protected void lbDownloadFile_Click(object sender, EventArgs e)
        {    //here is my debug pointer/breakpoint
        }

我刚刚在链接按钮上添加了文本。

我认为OP已经动态添加了“Text”。这不是问题,问题出现在页面加载事件上。但是OP没有放置那段代码。 :) - user3559224

0

只需转到按钮属性并设置

UseSubmitBehaviour= False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接