对于我正在处理的旧 ASP.NET 项目,我们有一个带有按钮的用户控件......
<%@ Control language="C#" AutoEventWireup="True" Codebehind="MyControl.ascx.cs" Inherits="MyNamespace.MyControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<!-- SNIP: Unrelated HTML tags... -->
<asp:button id="btSubmit" OnClick="btSubmit_Click" runat="server" style="FONT-WEIGHT: bold; COLOR: black" tabIndex="32" Text="View"></asp:button>
自从升级到 .NET 4.0 后,无论我们尝试在什么平台上运行它,我们都会收到以下错误:
编译器错误消息: CS1061:“ASP.MyControl_ascx”不包含“btSubmit_Click”的定义,并且找不到接受“ASP.MyControl_ascx”类型的第一个参数的扩展方法“btSubmit_Click”(您是否缺少 using 指令或装配参考?)
...但在后面的代码中:
// Class is defined as a partial, between MyControl.ascx.cs and MyControl.designer.ascx.cs
public class MyControl : UserControl
{
// This is defined in the designer code...
protected Button btSubmit;
// This is defined in the main code behind...but it IS defined.
protected void btSubmit_Click(object sender, EventArgs e)
{
// SNIP: Functionality that works.
}
}
我尝试了以下方法来解决此问题:
- 确保标记有效
- 确保 C# 代码没有编译错误。
- 仔细检查控制 Razor 标记以确保其
autoeventwireup
为真,并且Codebehind
设置Inherits
正确。 - 检查以确保我的按钮控件没有与按钮单击事件发生冲突。
- 根据建议,将按钮重新关联到设计模式下的单击事件。
另请注意:此 Web 项目正在通过 TeamCity 部署到 Web 服务器。当通过 Visual Studio 在本地运行时,这可以正常工作,但在服务器上失败。
问题:究竟是什么导致了这个编译器错误?这段代码看起来不错。我看不出它有什么瑕疵。