現在、MVC 3を使用してマルチテナンシーWebアプリを作成しています。少なくとも30の異なるWebサイトが共通のコードベースを共有し、同様の内部機能を共有する一方で、それらは大幅に異なるように見える必要があります。結果として、URLを使用してクライアントを内部的に分離し、オーバーライドされたRazorビューエンジン(少なくともビューの検索に関して)を使用して、特定のアクション用にカスタマイズされたビューまたはデフォルトのビューを自動的に選択します。
複雑なページを「コンパートメント化」するために、特定のビューはいくつかのパーシャルを使用し、通常は自己完結型のアクションとしてレンダリングされるため、通常、カスタムビューまたはパーシャルビューのHTMLの違いはわずかであり、に固有のコードを最小限に抑えるのに役立ちます。クライアントのサイト。
あなたがその背景に従ったことを願っています!
したがって、1つのHTMLページは、クライアントの特定のフォルダーまたは汎用バージョンから取得される可能性のあるHTML部分ビューの小さな断片で構成されている可能性があります。デザイナーが変更したいHTMLのビットがフォルダー構造のどこにあるかを簡単に確認できるようにすることで、デザイナーがページに小さな変更を加えやすくすることを望んでいます。
私の提案は、各パーシャルが次のようなHTMLコメントで「括弧で囲まれる」ことです。
{部分的な内容}
明らかに、これらを手動で挿入することもできますが、それは問題、タイプミス、コピーされてから変更されたクライアントバージョンが正しいURLで更新されていないことを求めているだけです。ある文脈からこれを取得して注入することは可能であると私は思います。
同時に、特定のアクションではこれを実行できないようにする必要があります。たとえば、パーシャルがテキストエリア内にテキストを生成している可能性があるため、コメントは適切ではありません。全体として、適切でないことを明記しない限り、これらのコメントを喜んで入力します。
私にとって、これはアクションにActionFilterを提案します。これは、サイト全体に適用してから、特定のアクションに対してオフにすることができます。オーバーライド可能なイベントの1つでこのパスを確認できるといいのですが、保存されている場所が見つからないようです。さらに、OnResultExecutingは、Partialが選択される前に起動しているようであり、OnResultExecutedはすでにPartialの内容を書き出しているようであるため、ここに開始コメントを挿入することはできません。また、選択したパーシャルのパスへの参照が見つかりません。
完全を期すために、この属性はデバッグモードでコンパイルされた場合にのみこれらのコメントを書き込むことを意図しています。
それで、FindPartialViewと属性の間のハックなしで、選択したビューへのパスを取得する方法を誰かが知っていますか?私の属性メソッドが最良の選択ですか、それともこれを行うためのより簡単な方法がありますか?おそらく、何かがすでに組み込まれています!
助けてくれて本当にありがとうございます。