質問

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

例: ターボタックス

サイドバーのボックスのコンテンツがデータベースに保存されているとは思えませんが、再利用可能なコードを作成するには、PartialView で構造を作成し、コンテンツ領域を設定するのが有益でしょう。PartialView を作成し、親コントローラーから PartialView にモデルを渡すことはできますが、別のページで同じボックスを使用したい場合は、同じコンテンツをコピーして貼り付ける必要があります。

役に立ちましたか?

解決

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

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

他のヒント

多くの場所で使用される部分ビューへのデータの受け渡しは、さまざまな方法で実行できます。

すべてのモデルのベースモデルクラスを作成します。基本クラスで、部分ビューのモデルを保持する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()); %>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top