3

これが明らかな場合はお詫びしますが、部分ビューで使用されるモデルのキャッシュを処理する属性を作成しようとしています。

  [MyCache(typeof(MyModel))]
  public ActionResult MyAction(string fooId)
  {
      return PartialView(new MyModel());
  }

私の属性は、postの入力モデルでキャッシュを更新し、キャッシュされたモデルでgetのアクション結果をオーバーライドすることになっています。

ただし、コントローラーの外部からPartialViewメソッドを呼び出す方法がわかりません。このコンストラクターには引数がないようです。

  new PartialViewResult(filterContext.HttpContext.Cache.Get("MyModelCache")[model.Name]);

かみそりビューを使用してモデルを構築するにはどうすればよいですか?ありがとう。

4

2 に答える 2

3
filterContext.Controller.ViewData.Model = 
    filterContext.HttpContext.Cache.Get("MyModelCache")[model.Name];
filterContext.Result = new PartialViewResult
{
    ViewData = filterContext.Controller.ViewData,
    ViewName = "~/Views/_NameOfPartial", // optional if you need it
};

PartialView2つの引数を取るコントローラーのメソッドのソースは次のとおりです。

namespace System.Web.Mvc
{
    public abstract class Controller : ControllerBase, (etc)
    {
        ...
        protected internal virtual PartialViewResult PartialView(
            string viewName, object model)
        {
            if (model != null)
                this.ViewData.Model = model;
            PartialViewResult partialViewResult = new PartialViewResult();
            partialViewResult.ViewName = viewName;
            partialViewResult.ViewData = this.ViewData;
            partialViewResult.TempData = this.TempData;
            partialViewResult.ViewEngineCollection = this.ViewEngineCollection;
            return partialViewResult;
        }
        ...
    }
}
于 2013-02-26T12:03:04.187 に答える
2

これを試して

new PartialViewResult
{
    ViewData = new ViewDataDictionary(filterContext.HttpContext.Cache.Get("MyModelCache"))[model.Name],
}
于 2013-02-26T12:03:48.083 に答える