2009-10-28 8 views
5

私は1.1プロジェクトを2.0に変換しており、一部のユーザーコントロールに問題があります。クラスライブラリのUserControls

元のプロジェクトには、クラスライブラリプロジェクトとウェブサイトプロジェクトがありました。クラスライブラリプロジェクトには、UserControlsというフォルダがあり、これにはいくつかのascxファイルとそのコードビハインドファイルがありました。

私はこれらのユーザーコントロールを別のクラスライブラリプロジェクトの新しいソリューションに持ち込むために同じ構造を保ちたいと思います。フルクラスから部分クラスに変更し、CodeBehindをページのCodeFileに変更しました。

protected System.Web.UI.WebControls.DropDownList _findModeList; 

など

を次のように古いユーザーコントロールで

は、ユーザーコントロール内のすべてのWebコントロールがリストされていた私は、それは、.NET 2が、代わりにCodeFile属性を使用して思いました私はこれをする必要はないかもしれませんが、省略するとコンパイルされません。

しかし、私はそれを含めるとコンパイルされますが、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"というメッセージが表示されます。コードファイルで_findModeListを使用しようとするとエラーが発生します。

ユーザコントロールを.net 2.0のクラスライブラリに置くことは可能ですか?

答えて

3

.ASCXファイルは、それを使用する各Webアプリケーションプロジェクトに含める必要があります。重複を避けるために、クラスライブラリのフォルダにUserControlを格納し、Visual Studioの "リンクとして追加"機能を使用することができます。

Webアプリケーションのコンテキストメニューで[既存項目を追加]を選択し、ユーザーコントロールを選択し、[追加]ボタンをクリックする代わりに、そのボタンの矢印をクリックして[リンクとして追加]を選択します。

1

Webアプリケーションプロジェクトで作業していますか?またはWebサイト?混乱しています。私は知っています...

WAPで作業している場合は、CodeFileを使用してASP.NETで.designer.csファイルを生成させます。 .acsxからオブジェクトを宣言しないでください。 CodeFileで参照される.csファイルで_findModeListを明示的に宣言すると、新しい/別のDropDownListを宣言しています。そのため、null参照を取得しています...初期化されていません。 .designerファイルがない場合は、ソリューションエクスプローラで.ascxを右クリックし、[Webアプリケーションに変換]をクリックします。

WAPではなくサイトで作業している場合は、CodeBehind属性を使用します。 ASP.NET 1.1のように動作し、オンザフライでコンパイルします。

コントロールを完全にDLLで使用するには...ユーザーコントロールではなくカスタムコントロールを使用します。繰り返しますが、混乱します。

1

実際には、これら二つの異なるプロジェクト間であるため、新しいウェブサイトを作成していない新しいWebアプリケーションプロジェクトを作成してみてください。

Webアプリケーションを作成したら、ユーザーコントロール(.ascx)を作成してください。その後、Webアプリケーションを再構築することができます。終了したら、あなたのbinディレクトリにブラウズすることができます、あなたのWebアプリケーションのDLLがあるはずです。これで、このdllを別のWebサイト/ Webアプリケーションプロジェクトで使用できます。このdllへの参照を追加するだけです。

1

<%@ Control%>タグのInherits属性を変更/追加しようとしましたか?

<%@ Control Language="C#" CodeBehind="<PathToTheFile>" Inherits="namespace.and.classname" %> 
関連する問題