0

チームasp.net-mvc Webサイトがあり、site.masterページに

  • ヘッダー画像
  • メニュー
  • 私のすべてのjsとcssが含まれています。

2 つの異なるポートでサイトを実行する 2 つの異なるチームにサイトを使用する必要があり、各チームにはチームの情報のみが表示されます (サイトとデータベースはほぼ同じですが、データベース フィルターが異なるだけです)。

これをコントローラークラスに追加して、バックエンドを実現しました。

     string team = ConfigurationManager.AppSettings["Team"]

その値に基づいて、実行するDBクエリを変更します。それはうまく機能していますが、フロントエンドを微調整する必要があります(ヘッダー画像といくつかのメニュー項目も変更する必要があることに気づきました)

そのため、同じコードベースを使用して 2 つの異なるチームのビューをサポートする必要があるため、site.master をリファクタリングする必要があります。

  • 各チームが独自の headerImage を表示する
  • 各チームが独自のメニュー項目を持つ
  • 一般的なコード (css や js に含まれるコードなど) の重複を避ける

(現在は、site.master ファイルにハードコードされています)

すべてのコードをコピーして別のマスター ページ (site2.master など) に貼り付け、すべての共通コードを複製することができましたが、2 つのマスター間で共通コードをすべて除外する機能があるかどうかを確認したかったのです。重複を避けるためのファイル。

また、構成エントリに基づいてどのマスター ファイルを使用するかをコードで動的に「把握」する方法を理解しようとしています。ネストされたマスター ページを使用することを考えていましたが、各ページは実際には Team1 と Team2 の両方に適用可能であり、動的に設定する必要があるため、機能していないようです。すべてのコントローラーアクションにこのスイッチコードがある状況を避けたいと思います

4

1 に答える 1

1

さまざまなメニュー項目があるため (これが私の答えを決定する主な部分です)、次のいずれかを使用するよりも、2 つのマスター ビューを使用する方が適切なアプローチになると思います。

a) マスター ビューの If/Else または

b)リクエストごとに解析する必要がある大量の構成エントリ、および

c) 要求または必要に応じて、将来的にさらにカスタム テーマを作成するためのより簡単なパスを提供します。

ただし、記述する必要のあるコードの量を減らし、重複を避ける方法は確かにあります。以下は、私が推奨するいくつかの提案です

1.DB クエリ設定と同じロジックを使用して、チームに応じてマスター ページを設定します。例:

<appSettings>
   <add key="team" value = "WhateverYouAlreadyHave"/>
   <add key="layout" value = "~/Views/Shared/team.master"/>
</appSettings>

2. ビューで、上部にレイアウト ビューを次のように指定します。

@{
    ViewBag.Title = "My Page Title";
    Layout = @ConfigurationManager.AppSettings("layout");
}

3. マスター ビューで、JS と CSS を、マスター ページから呼び出すことができる共有部分ビューに分割します。

@{Html.RenderPartial("HeadContent");}

これにより、レイアウト情報で自分自身を繰り返さないという目標が達成され、マスター ビューで If/Else ステートメントの潜在的な必要性が削減されると思います。最後に、サイト (異なるサーバーなど) を分離する必要があった場合でも、ビューの周りにデッド コードが浮かぶことなく、すばやく分離できるはずです。

最後に、別の解決策は、単一のレイアウト ファイルを保持し、共有された部分ビューに入る内容を逆にすることだと思います。つまり、共有部分ビュー名だけでなく、ヘッダー イメージを構成値として保存することもできます。この場合、単一のマスターから呼び出すことができる独自の部分ビューにメニューを配置します。ただし、将来、カスタム レイアウト/外観/テーマを本当に提供したい場合、単一のマスター ページでこれを実現することはより困難になります。

于 2013-03-19T13:45:20.947 に答える