3

我需要将部分视图呈现为字符串,因此我可以将 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,但它引出了一个问题……为什么会出现差异?

4

1 回答 1

3

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

更让我困惑的是,如果我们只是要求 ViewEngine.Engines 集合来查找视图,我们没有得到 useCache 参数:

那是因为这个方法做了我之前解释过的事情。

于 2012-08-23T17:31:55.290 回答