1

对于我正在处理的旧 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.
    }
}

我尝试了以下方法来解决此问题:

  1. 确保标记有效
  2. 确保 C# 代码没有编译错误。
  3. 仔细检查控制 Razor 标记以确保其autoeventwireup为真,并且Codebehind设置Inherits正确。
  4. 检查以确保我的按钮控件没有与按钮单击事件发生冲突。
  5. 根据建议,将按钮重新关联到设计模式下的单击事件。

另请注意:此 Web 项目正在通过 TeamCity 部署到 Web 服务器。当通过 Visual Studio 在本地运行时,这可以正常工作,但在服务器上失败。

问题:究竟是什么导致了这个编译器错误?这段代码看起来不错。我看不出它有什么瑕疵。

4

2 回答 2

2

奇怪的是,我的问题的解决方案是我的构建设置已关闭!这段代码完全理智的!

作为提示,您需要执行以下步骤作为诊断措施:

  1. 右键单击您的解决方案,导航到属性
  2. 展开配置属性,单击配置
  3. 确保您需要构建的所有库都选中了构建复选标记

失败的原因是 DLL 不存在,因为它们不是一开始就构建的;当整个项目试图引用这些不存在的 DLL 时,它因上述编译错误而严重失败。

于 2013-08-30T19:21:03.183 回答
1

您必须将类后面的代码声明为部分并删除按钮声明,因为 Visual Studio 也会生成一些代码。

namespace MyNamespace
{
    public partial class MyControl : UserControl
    {
        protected void btSubmit_Click(object sender, EventArgs e) { ... }
    }
}

如果这不起作用,请创建一个新的 UserControl 并将代码复制粘贴到类和 HTML 中。

于 2013-08-28T21:09:52.300 回答