C# 构造局部视图的操作

C# 构造局部视图的操作,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,如果这是显而易见的,我表示歉意,但我正试图使该属性成为处理局部视图中使用的模型缓存的属性 [MyCache(typeof(MyModel))] public ActionResult MyAction(string fooId) { return PartialView(new MyModel()); } 我的属性应该使用post上的输入模型更新缓存,并使用缓存模型覆盖get上的操作结果 但是,我不知道如何从控制器外部调用PartialView方法。此构造函数似乎没

如果这是显而易见的,我表示歉意,但我正试图使该属性成为处理局部视图中使用的模型缓存的属性

  [MyCache(typeof(MyModel))]
  public ActionResult MyAction(string fooId)
  {
      return PartialView(new MyModel());
  }
我的属性应该使用post上的输入模型更新缓存,并使用缓存模型覆盖get上的操作结果

但是,我不知道如何从控制器外部调用PartialView方法。此构造函数似乎没有任何参数:

  new PartialViewResult(filterContext.HttpContext.Cache.Get("MyModelCache")[model.Name]);
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;
        }
        ...
    }
}
如何使用razor视图构建模型?谢谢

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
};
以下是控制器中采用2个参数的
PartialView
方法的源代码:

  new PartialViewResult(filterContext.HttpContext.Cache.Get("MyModelCache")[model.Name]);
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;
        }
        ...
    }
}
试试这个

new PartialViewResult
{
    ViewData = new ViewDataDictionary(filterContext.HttpContext.Cache.Get("MyModelCache"))[model.Name],
}

谢谢你提供了更完整的答案!那么是否不需要tempdata和ViewEngineCollection?除非局部视图使用tempdata或需要自定义视图引擎,否则不需要。