RazorViewEngine.FindPartialView useCache。它有什么作用?

时间:2012-08-23 17:11:36

标签: c# caching razor asp.net-mvc-4

我需要将部分视图渲染为字符串,因此我可以将Razor语法部分视图渲染到Asp.net视图中。部分过程涉及让视图引擎查找视图:

var engine = 
    ViewEngines.Engines
        .OfType<RazorViewEngine>()
        .SingleOrDefault();
if(engine == null)throw new Exception("no razor viewengine");
//useCache is the last parameter in the invocation below
var viewResult = engine
    .FindPartialView(htmlHelper.ViewContext, viewName, false);

如果我将useCache参数设置为true(即我不希望虚拟路径提供程序在每次请求时都搜索它),则不再找到该视图。我原以为如果没有通过缓存找到它,我们会回到非缓存方法。

我的期望是错的吗?这与混合ViewEngines有关吗?

让我更进一步,如果我们只是要求ViewEngine.Engines集合查找该视图,我们就不会给出useCache参数:

var viewResult = 
    ViewEngines
         .Engines
         .FindPartialView(htmlHelper.ViewContext, viewName);

我想我会选择这个FTTB,但它引出了一个问题......为什么会出现差异?

1 个答案:

答案 0 :(得分:3)

FindViewFindPartialView方法由ASP.NET MVC框架在内部首先调用useCache=true,然后在useCache=false内调用,如果没有找到。你也可以尝试这样做。

  

如果我们只是问ViewEngine.Engines,那么我会更加困惑   为了找到视图的集合,我们没有给出useCache参数:

那是因为这种方法符合我之前的解释。