3

いくつかの MVC4 プロジェクトがあり、これらのプロジェクトで再利用される一連の表示/エディター テンプレートを作成したいと考えています。これらのテンプレートを含む共通プロジェクトを作成し、他のプロジェクトで参照したいと考えています。

したがって、共通のプロジェクトで定義されたビューと、他のいくつかのユーティリティがあります。

Common
- Models
  - CommonMetadataAttribute.cs
- Views
  - Shared
    - EditorTemplates
      - Decimal.cshtml
      - Object.cshtml
      - Password.cshtml
      - String.cshtml
      - Switch.cshtml
    - ViewTemplates
      - Object.cshtml
      - Switch.cshtml
    - Error.cstml

そして、私のクライアントプロジェクトのモデルでは、

using MobileWeb.Common

public class MyViewModel
{
    [UIHint("Switch")]
    [CommonMetadata(Theme = "foo")]
    public bool Enable { get; set; }
}

クライアント プロジェクト ビューでは、次のように呼び出すだけでカスタム エディターを生成できます。

@model MyViewModel
...
@Html.EditorFor(model => model.Enable)

理想的には、クライアント プロジェクトは独自のテンプレートでオーバーライドでき、プロジェクト固有のテンプレートが定義されていない場合は、共通のテンプレートにフォールバックするだけです。

MvcContrib のポータブル領域を検討しましたが、これは実際には領域ではなく、設定方法もよくわからないため、機能するかどうかはわかりません。その道を進む前に、これを行うための好ましい方法は何ですか?

4

1 に答える 1

3

個人的には、私は常にテンプレートを としてパッケージ化してきましcustom NuGetsた。カスタム テンプレートを NuGet に配置すると、ユーザーがこの NuGet をプロジェクトにインストールすると、アプリケーションの正しいフォルダーに自動的に追加されます。また、アプリケーション全体のすべての EditorFor/DisplayFor 呼び出しが自動的に、既定のテンプレートではなくカスタム テンプレートの使用を開始します。

この方法では、サード パーティのアセンブリなどに埋め込まれた Razor ビューを取得するために、いくつかのカスタム VirtualPathProvider (アプリケーションをプリコンパイルするとすぐに壊れます) を記述する必要はありません。NuGets を使用するもう 1 つの利点は、ユーザーは自分のアプリケーションにあなたのテンプレートを持っており、あなたの仕事に満足していない場合は簡単に変更できます。彼が本当に怒っている場合は、NuGet をアンインストールして、アプリケーションを既定の状態にロールバックするだけで済みます。

于 2013-02-05T21:33:06.113 に答える