1

ヘッダー、画像、コンテンツを保持するボックスのPartialViewを作成する場合、データベースを使用せずにコンテンツを保存するための最良の方法は何ですか?

例:TurboTax

サイドバーのボックスのコンテンツがデータベースに保存されているかどうかは疑問ですが、再利用可能なコードを作成するには、PartialViewで構造を作成し、コンテンツ領域にデータを入力すると便利です。PartialViewを作成し、親コントローラーからPartialViewにモデルを渡すことはできますが、別のページで同じボックスを使用したい場合は、同じコンテンツをコピーして貼り付けることができなくなります。

4

2 に答える 2

1

多くの場所で使用されている部分ビューにデータを渡すには、さまざまな方法があります。

すべてのモデルの基本モデルクラスを作成します。基本クラスで、部分ビューのモデルを保持するPartialModelプロパティを定義します(使用に多くの部分ビューがある場合は、それらの多くが存在する可能性があります)。これで、コントローラーアクションにPartialModelプロパティを設定できますが、コードを再利用しやすくするために、アクションメソッドが実行された直後(モデルがビューに渡される前)に部分ビューデータを挿入する独自のアクションフィルターを作成できます。

public class PartialViewModelAttribute : ActionFilterAttribute
{
  public override void OnActionExecuted(ActionExecutedContext filterContext)
  {
     BaseViewModel model;

     if (filterContext.Controller.ViewData.Model == null)
     {
          model = new BaseViewModel();
          filterContext.Controller.ViewData.Model = model;
     }
     else
     {
        model = filterContext.Controller.ViewData.Model as BaseViewModel;
     }

     model.PartialModel = new PartialModel(...)   // Partial model initialization
     base.OnActionExecuted(filterContext);
  }
}

次に、次のように使用できます。

[PartialViewModel]
public ActionResult Index()
{
  //...
}

別のオプション:すべてのコントローラーのBaseControllerクラスを作成し、ベースコントローラーの初期化時にPartialModelを作成できます。次に、PartialModelをViewData[]ディクショナリに格納できます。ビューでViewDataディクショナリを使用するのは悪いため、HtmlHelperで次のような拡張メソッドを作成します。

public static PartialModel GetPartialModel(this HtmlHelper helper)
{
   return helper.viewContext.ViewData["PartialModel"] as PartialModel
}

したがって、次の方法でモデルを取得できます。

<% Html.RenderPartial("MyPartial", Html.GetPartialModel()); %>
于 2009-11-26T08:33:55.123 に答える
1

フィックス コンテンツの場合は、ファイル システムで XML+XSLT や HTML スニペットを使用して単純にレンダリングすることを検討することをお勧めします。HtmlHelper メソッドは、Html.RenderXml() または Html.Include() の部分的なビューよりもこれに適している場合があります。これらのビューと部分ビューの唯一の実際の違いは、置換がないため、ビュー エンジンが呼び出されないことです。私はこの種のことをプライバシーポリシーと利用規約で行っています. 私は確かにこれらをキャッシュしておくことを検討します。

これらが実際にテンプレートであり、コンテンツを置き換えるだけである場合は、部分ビューがうまく機能すると思います。データをデータベースに入れることを検討します。パフォーマンスが低下していることが判明した場合は、キャッシュを使用することもできます。これを前者と組み合わせて使用​​できます。つまり、画像/xmlをファイルシステムに保持し、それらへのポインターをデータベースに保持して、部分的に選択するものがわかるようにします。

于 2009-11-26T14:18:52.540 に答える