複数のプロジェクトで再利用できる検証ツールが必要だったので、それをWebユーザーコントロールにすることにしました。以下は、設定するために行った手順です。
- 新しいWebプロジェクトを作成し、Webユーザーコントロールを追加しました。
- IISでは、プロジェクトをアプリケーションとして有効にし、この新しいプロジェクトフォルダーを、それを使用するすべてのプロジェクトの仮想ディレクトリとして設定し、各仮想ディレクトリをアプリケーションとして有効にしました。
コントロールを使用するプロジェクトごとに、dllへの参照を追加し、そのプロジェクトの
web.config
: にコントロールを追加しました。<add tagPrefix="ut" src="~/UserControls/ValidateAcct.ascx" tagName="ValidateAcct" />
注:
'UserControls'
は仮想ディレクトリであり、実際には各ホストプロジェクトに存在するわけではありません。次に、コントロールをホストページに追加しました。
<ut:ValidateAcct ID="valAcct" runat="server" />
実行時に、Webユーザーコントロールのコンテンツはホストページに正しく表示されますが、ホストページのコードビハインドからは、Webユーザーコントロール用に作成したメソッドを呼び出すことができません。制御を完全にコードビハインドからインスタンス化する場合、メソッドはそこにあります。これは、私がdllからのみ作業しており、仮想ディレクトリを含まないためだと思います。
私が直面しているもう1つの問題は、イベントに関するものです。Web User Controlで次のイベントを作成しましたが、ホストページで処理したいと思います。
protected virtual void AccountValidated(object sender, EventArgs e) { }
繰り返しになりますが、ホストページのコードビハインドからこのイベントにアクセスできません。メソッドの場合と同じように、コードビハインドでコントロールをインスタンス化してイベントにアクセスできるのではないかと思いましたが、それでも機能しませんでした。
ここでの目標は、このユーザーコントロールを、1つのWebサイト内の複数のプロジェクトで使用できるようにすることですが、コントロール/コードのコピーを1つだけ維持する必要があります。これが私が仮想ディレクトリルートに行った理由ですが、これが私のすべての問題の原因であると感じています。誰でもできるどんな援助も大歓迎です!