2010-03-03 2 views
2

매개 변수를 사용하여 자체 초기화 방법을 결정하는 WebUserControls가 있습니다. 내가 페이지를 컴파일 할 때 그러나, 나는임시 파일에 인수가없는 생성자에 대한 참조가 포함되어 있지 않아야합니다.

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

가 난 아무데도 인수없이 호출하고 있지 않다 오류를 얻을, 참조 임시 파일에 생성되는 것 같습니다. 빈 생성자가없는 다른 컨트롤이 있고 거기에 하나를 만들 필요가 없으므로 하나가 없어야합니다.

실제 오류는 다음과 같습니다

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

편집이 : 아래 의견을 바탕으로 내가 컨트롤에 대한 참조를 가지고 나타납니다

Compiler Error Message: CS1729:

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

Source Error:

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

Source File: (Path)Local\Temp\Temporary ASP.NET Files\root\1aca8e08\3fab105e\App_Web_controlname.ascx.cdcab7d2.tzm0xzkd.0.cs Line: 110

제어는 다음과 같습니다 디자이너 파일 ... 어딘가에 ... 찾을 수있는 모든 참조는 한 가지 예외를 제외하고 코드 숨김에 있습니다. 의 .ascx 파일의 선언 :

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

나는이 범인이라고 생각했지만 추가 검사 나 비슷한 선언이 있고 기본 생성자를 필요로하지 않는 다른 컨트롤을 가지고있다.

컨트롤이 참조되는 위치는 어떻게 찾을 수 있습니까?

솔루션 :

은 내가 가진 참조 태그

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

분명히 디자이너 요소로 간주 이전에서 남은.

아래의 답변에는 실제로이 정보가 포함되어 있지 않지만 문제가 무엇인지 잘 설명되어 있습니다.

답변

2

저는 웹 개발 전문가는 아니지만 웹 폼 디자이너에 컨트롤의 인스턴스가 있고 그 디자이너가 매개 변수없는 생성자를 필요로하는 코드를 생성하고있는 것처럼 보입니다.

이 경우이 문제를 해결하려면 양식에서 컨트롤을 제거하거나 매개 변수없는 생성자를 추가해야합니다.

+1

컨트롤이 사용되는 페이지가 디자이너 부분에서 컨트롤을 참조하고 매개 변수없이 생성자를 예상 할 수 있습니다. – mwright

+0

예, 그렇습니다. XAML 양식을 만들 때이 문제가 발생했습니다. 디자이너는 객체를 생성하기 위해 어떤 종류의 생성자를 호출해야합니다. –

+0

@mwrite - @Jeffrey가 맞습니다. ASP.NET과 WinForms 디자이너 모두 매개 변수없는 생성자가있는 UI 요소에 따라 달라집니다. 동적으로 컨트롤을 생성하고 기존 폼이나 페이지에 추가하는 경우에는 괜찮습니다. 그러나 디자인 타임에 폼에 끌어 놓기하면 .designer.cs 파일은 InitializeComponents 메서드에서 기본 생성자를 호출합니다. – Nick

0

CLR이 수퍼 클래스의 기본 생성자를 클래스에 호출하려고 시도하지만이를 할 수 없습니다. 적절한 기본 생성자를 명시 적으로 호출합니다.

0

매개 변수없이 ctor가 있으면 매개 변수없이 부모 클래스 ctor를 호출하려고 시도합니다. 하지만 기본 클래스에는없는 클래스가 있습니다.

0

나는 이것이 당신을위한 경우인지 모르겠다. 나는 과거에 객체 직렬화로 작업 할 때 컴파일 오류를 받았다. XML 직렬화를 독점적으로 사용할 때이 오류가 발생했습니다. 객체를 직렬화 해제 할 때 런타임은 기본 생성자를 사용하고 있었으므로 컴파일러가 플래그를 지정하지 않았습니다.

0

편집 내용에 따르면, 실제로 선택한 이름 때문에 나타날 수 있습니다. Control.Control 클래스가 많이 있으며 ascx의 선언에 네임 스페이스 충돌 문제가있을 수 있습니다. 컨트롤의 이름을 다른 것으로 변경하십시오.

+0

컨트롤은 컨트롤의 실제 이름이 아닙니다. 오해의 소지가 있다면 그냥 자리 표시 자일뿐입니다. 이를 반영하도록 수정하겠습니다. – mwright

관련 문제