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);
    }
}

編集:以下のコメントに基づいて、デザイナー ファイル内のコントロールへの参照があるように見えます...どこか...私が見つけることができるすべての参照は、1 つの例外を除いてコード ビハインドにあります。.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 に答える