2

我有一些 WebUserControls 带有一个参数来确定它们如何初始化自己。但是,当我编译页面时出现错误

'ControlName' does not contain a constructor that takes '0' arguments

我不会在没有参数的情况下在任何地方调用它,似乎是在临时文件中生成了一个引用。我有另一个没有空构造函数的控件,它不需要在那里创建一个,所以它不应该有一个。

实际错误如下所示:

编译器错误消息:CS1729:

“ControlName”不包含采用“0”参数的构造函数

源错误:

第 108 行:private static bool @__initialized; 第 109 行:第 110 行:
[System.Diagnostics.DebuggerNonUserCodeAttribute()] 第 111 行:public control_ascx() { 第 112 行:
((global::ControlNamespace)(this)).AppRelativeVirtualPath = "~/ControlName.ascx";

源文件:(路径)Local\Temp\Temporary ASP.NET Files\root\1aca8e08\3fab105e\App_Web_controlname.ascx.cdcab7d2.tzm0xzkd.0.cs 行:110

控件如下所示:

public partial class ControlName: System.Web.UI.UserControl
{
    public ControlName(IParameter parameter)
    {
        Method(parameter);
    }
}

编辑:根据下面的评论,我似乎在设计器文件中引用了控件……某处……我能找到的所有引用都位于代码后面,但有一个例外。.ascx 文件中的声明:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ControlName.ascx.cs" Inherits="Control" %>

我认为这是罪魁祸首,但经过进一步检查,我还有其他具有类似声明且不需要默认构造函数的控件。

如何找到引用控件的位置?

解决方案:

我有参考标签

<%@ Reference Control="~/ControlName.ascx" %>

早期的剩余物显然算作设计师元素。

下面的答案实际上并不包含此信息,但很好地描述了问题所在。

4

5 回答 5

2

我不是 Web 开发方面的专家,但看起来您已经在 Web 表单设计器上放置了一个控件实例,并且该设计器正在生成需要无参数构造函数的代码。

如果是这种情况,那么要解决此问题,您应该从表单中删除控件或添加无参数构造函数。

于 2010-03-03T17:57:42.010 回答
0

CLR 试图将超类的默认构造函数调用到您的类,但它不能。显式调用合适的基本构造函数。

于 2010-03-03T17:38:05.263 回答
0

当你有没有参数的ctor时,它会尝试调用没有参数的父类ctor。但它的基类没有。

于 2010-03-03T17:38:07.603 回答
0

我不知道你是否是这种情况。我过去在使用对象序列化时遇到过编译错误。如果我没记错的话,当我们专门使用 XML 序列化时,我们会得到这个错误。反序列化对象时,运行时使用默认构造函数,因此如果没有,编译器会对其进行标记。

于 2010-03-03T17:38:21.907 回答
0

根据您的编辑,我认为这实际上可能是因为您选择的名称Control...... 有很多Control类,可能是 ascx 中的声明存在命名空间冲突的问题。尝试将您的控件重命名为其他名称。

于 2010-03-03T19:06:08.417 回答