2009-11-19 124 views
1

我有一个.aspx页下面的按钮:C#按钮单击

<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'(您是否缺少使用方法ve或程序集引用?)

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

任何想法?

回答

7

您确定将该方法置于正确的代码隐藏文件中吗?

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


松散相关的边注:通过与对应于该方法的字符串值设置OnClick你要调用你隐式依赖于ASP.NET的AutoEventWireup功能,我不考虑是一个好方法。最好是手动关联您的控件在你的页面的OnInit覆盖方法是这样的:

bntLogin.Click += bntLogin_Click; 

通过依靠AutoEventWireup您允许ASP.NET运行时为您创建此代码,因为这发生在执行时您将面临执行时间性能损失以及冒险像您现在看到的那样的异常。

+0

是的,我仔细检查,它在正确的代码隐藏和继承正确的类。 – Neil 2009-11-19 21:23:40

+0

好的,尝试从aspx文件中删除'OnClick'属性并添加上面发布的代码。 – 2009-11-19 21:25:58

+0

我的理解是,如果你使用AutoEventWireup,那么就没有必要在aspx中显式声明像OnClick这样的事件处理程序。 – recursive 2009-11-19 23:57:54

0

我通常挂钩的代码隐藏的OnInit方法,这是一种保持在从ASP.NET 1.1(这也正是设计师会把它当时的情况。)

0

万一你的事件仍然运行ASP.NET 1.1,删除aspnet_client文件夹,重建并重试。