【问题标题】:C# Button ClickC# 按钮单击
【发布时间】:2009-11-19 21:12:01
【问题描述】:

我在 .aspx 页面上有以下按钮:

<asp:Button runat="server" ID="bntLogin" OnClick="bntLogin_Click" Text="Login" />

在 .aspx.cs 中有以下内容:

protected void bntLogin_Click(object sender, EventArgs e)
        {
           //
        }

当我尝试构建它时,我收到以下错误:

“ASP.reserve_aspx”不包含“bntLogin_Click”的定义,并且找不到接受“ASP.reserve_aspx”类型的第一个参数的扩展方法“bntLogin_Click”(您是否缺少 using 指令或程序集引用? )

但是,当我将 click 事件从代码隐藏移动到它构建的标记内的脚本块时。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net button events click


    【解决方案1】:

    您确定将方法放在正确的代码隐藏文件中吗?

    通过查看 aspx 文件本身顶部的 @page 指令(检查 inherits 属性)检查您将哪个文件用作代码隐藏文件 - 您可能会感到惊讶。


    一个松散相关的附注:通过将OnClick 设置为与您希望调用的方法相对应的字符串值,您隐式依赖于 ASP.NET 的AutoEventWireup 功能,我不要认为是一个好方法。最好在页面的 OnInit 覆盖方法中手动连接控件,如下所示:

    bntLogin.Click += bntLogin_Click;
    

    通过依赖 AutoEventWireup,您允许 ASP.NET 运行时为您创建此代码,由于这发生在执行时,您将招致执行时性能损失,并冒着像您现在看到的那样的异常风险。

    【讨论】:

    • 是的,我仔细检查了,它在正确的代码隐藏中并继承了正确的类。
    • 好的,尝试从您的 aspx 文件中删除 OnClick 属性并添加我在上面发布的代码。
    • 我的理解是,如果你使用AutoEventWireup,那么就不需要在aspx中显式声明OnClick之类的事件处理函数了。
    【解决方案2】:

    我通常在代码隐藏的 OnInit 方法中连接事件,这是 ASP.NET 1.1 的保留(当时设计者会将其放回原处。)

    【讨论】:

      【解决方案3】:

      如果您仍然在运行 ASP.NET 1.1,请删除 aspnet_client 文件夹,重新构建并重试。

      【讨论】:

        猜你喜欢
        • 2015-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-25
        • 2015-09-05
        相关资源
        最近更新 更多