1

複数のプロジェクトで再利用できる検証ツールが必要だったので、それを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つだけ維持する必要があります。これが私が仮想ディレクトリルートに行った理由ですが、これが私のすべての問題の原因であると感じています。誰でもできるどんな援助も大歓迎です!

4

2 に答える 2

2

イベントをページにバブルできるように、ユーザーコントロールでイベントイベントハンドラーを作成する必要があります。

public event EventHandler AccountValidated;

2番目の問題については、designer.csファイルをチェックして、ユーザーコントロールタイプがValidateAcctであることを確認できますか。ValidateAcctではなく、UserControlだけの場合は、作成したメソッドが表示されないのはそのためです。

于 2011-08-09T20:55:10.710 に答える
1

プロジェクト間でコードを共有するためにWebディレクトリを設定する必要はありません。
実際、これは非常に間違ったアプローチです。

ユーザーコントロールを共有するのは確かに難しいですが、次の手順に従うと成功します。

  1. 通常どおり、通常はVisualStudioデザイナーを使用してユーザーコントロールを記述します。
  2. デプロイする前に、簡単なページを使用してテストしてください。
  3. アプリをデプロイしてプリコンパイルします。
  4. 展開手順で作成されたユーザーコントロールのアセンブリを取得すると、基本的に完了です。カスタムコントロールがあります。
  5. 最後に、いつもカスタムコントロールを使用するのと同じ方法で、他のアプリでカスタムコントロールを使用します。

このトピックに関する別の投稿もあり、MSBuildの自動化された機能が含まれています。簡単な方法のように思われるので、
最初に試してみますが、100%確実に機能するかどうかはわかりません。

于 2011-08-09T20:28:55.137 に答える