再利用を目的としていくつかのWebユーザーコントロールを構築することを検討していますが、VS2008のクラスライブラリにWebユーザーコントロールを追加できないようです。この問題を回避する方法はありますか、それとも再利用可能なコントロールを作成するためのより良いアプローチがありますか?
6 に答える
必要な機能をカプセル化するWebユーザーコントロールまたはWebカスタムコントロールのいずれかを作成できます。2つのコントロールの主な違いは、作成のしやすさと設計時の使いやすさです。
Webカスタムコントロールライブラリの作成を検討する必要があるかもしれません。Webコントロールライブラリテンプレートを使用してWebカスタムコントロールを作成するためのウォークスルーがあります。
MSDNの記事「WebユーザーコントロールとWebカスタムコントロールの推奨事項」によると、これらは2つのタイプのコントロールの違いです。
Webユーザーコントロールは簡単に作成できますが、高度なシナリオでの使用には不便な場合があります。Webユーザーコントロールは、Webフォームページを開発するのとほぼ同じ方法で開発します。Webフォームと同様に、ユーザーコントロールはビジュアルデザイナで作成でき、HTMLから分離されたコードで記述でき、実行イベントを処理できます。
ただし、Webユーザーコントロールは実行時に動的にコンパイルされるため、ツールボックスに追加することはできず、ページに追加すると単純なプレースホルダーグリフで表されます。これにより、プロパティウィンドウやデザインビューのプレビューなど、Visual Studio .NETの完全なデザイン時サポートに慣れている場合は、Webユーザーコントロールを使用しにくくなります。
また、アプリケーション間でユーザーコントロールを共有する唯一の方法は、アプリケーションごとに個別のコピーを配置することです。これにより、コントロールに変更を加えると、より多くのメンテナンスが必要になります。
Webカスタムコントロールはコンパイルされたコードであるため、使いやすくなりますが、作成が難しくなります。Webカスタムコントロールはコードで作成する必要があります。ただし、コントロールを作成したら、それをツールボックスに追加して、プロパティウィンドウを完全にサポートし、ASP.NETサーバーコントロールの他のすべてのデザイン時機能を備えたビジュアルデザイナーで表示できます。
さらに、Webカスタムコントロールの単一のコピーをグローバルアセンブリキャッシュにインストールしてアプリケーション間で共有できるため、メンテナンスが容易になります。詳細については、グローバルアセンブリキャッシュを参照してください。
次の手順に従います(Phil Haackedによるこの投稿から):
VS.NET2005を閉じます。
ディレクトリC**:\ Program Files \ Microsoft Visual Studio 8 \ Web \ WebNewFileItems \ CSharp **を開きます(VS.NETの既定のインストールを想定しています)。
メモ帳でCSharpItems.vsdirファイルを開きます。テキストを選択してクリップボードにコピーします。
次に、ファイルC:\ Program Files \ Microsoft Visual Studio 8 \ VC#\ CSharpProjectItems \ CSharpItems.vsdirを開き、クリップボードの内容を既存のテキストの下に貼り付けます。
- 次に、C:\ Program Files \ Microsoft Visual Studio 8 \ Web \ WebNewFileItems \ CSharp(CSharpItems.vsdirを除く)の内容をフォルダーC:\ Program Files \ Microsoft Visual Studio 8 \ VC#\CSharpProjectItemsにコピーします。
これで、[追加]、[Webユーザーコントロール]の順に選択すると、[Webユーザーコントロール]がオプションになります。新商品。
参照: http: //haacked.com/archive/2006/02/07/addingwebusercontroltoaclasslibraryinvs.net2005.aspx
platte のリンクが言及しているように、再利用する場合、Web ユーザー コントロールはあまり良くありません。ascx ファイルは、それらを使用するすべてのプロジェクトに手動でコピーする必要があります。または、それをハックする必要があります。
「ASP.NET サーバー コントロール」を追加すると得られる System.Web.UI.WebControls.WebControl を使用することをお勧めします。これらは再利用のために設計されています。既存のフレームワーク コントロールの 1 つが大部分の法案に適合し、その機能を拡張する必要がある場合は、「ASP.NET サーバー コントロール」を追加し、パネルやメニューなどから継承するように変更します。
再利用可能な Web ユーザー コントロールを機能させることにまだ決心している場合は、The Gu によるこの記事を参考にしてください。
「ASP.NETServerControl」というプロジェクトテンプレートがありますが、これを使用できると思います...
--larsw
クラス ライブラリでは何でもできます。
- System.Web への参照を追加
- WebControl や HtmlControl などから継承する新しい Control クラスを作成します。
それでおしまい。これで、ASP.NET の再利用可能なコントロールができました。
クラスやプロパティに属性を追加するなどの特別なことを行うこともできますが、それらは実際には必要ありません。
[DefaultProperty("Text")]
[Category("...")]
[DefaultValue("")]
仮想パス プロバイダーを使用することもできますが、それが本当に価値があるかどうかを検討する必要があります。これについては、このコードプロジェクトの記事を検討してください。