我有一些WebUserControls接受参数来确定它们如何初始化自己。但是,当我编译页面时,我收到错误
'ControlName' does not contain a constructor that takes '0' arguments
我没有在没有参数的情况下调用它,似乎在临时文件中生成了引用。我有另一个没有空构造函数的控件,它不需要在那里创建一个,所以它不应该有一个。
实际错误如下:
编译器错误消息:CS1729:
'ControlName'不包含 采用'0'参数的构造函数
来源错误:
第108行:私人静态布尔 @__initialized; 109行:行 110:
[System.Diagnostics.DebuggerNonUserCodeAttribute()] 第111行:public control_ascx() {第112行:
((全球:: ControlNamespace)(本))。AppRelativeVirtualPath =“〜/ ControlName.ascx”;源文件: (Path)Local \ Temp \ Temporary ASP.NET 文件\ 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" %>
早些时候遗留下来,显然算作设计师元素。
下面的答案实际上并不包含这些信息,但很好地描述了问题所在。
答案 0 :(得分:2)
我不是Web开发方面的专家,但看起来您已经在Web表单设计器上放置了一个控件实例,并且该设计器正在生成需要无参数构造函数的代码。
如果是这种情况,那么要解决此问题,您应该从表单中删除控件或添加无参数构造函数。
答案 1 :(得分:0)
CLR正在尝试将超类的默认构造函数调用到您的类,但它不能。显式调用合适的基础构造函数。
答案 2 :(得分:0)
当你有没有参数的ctor时,它会尝试在没有参数的情况下调用父类ctor。但它的基类没有。
答案 3 :(得分:0)
我不知道你是否属于这种情况。我在使用对象序列化时遇到了编译错误。如果我没记错的话,当我们独家使用XML序列化时,我们会得到这个错误。反序列化对象时,运行时使用的是默认构造函数,因此如果它没有,则编译器会对其进行标记。
答案 4 :(得分:0)
根据您的编辑,我认为这实际上可能是因为您选择的名称... Control
。有许多Control
类,可能是ascx中的声明存在名称空间冲突问题。尝试将您的控件重命名为其他内容。