我需要将部分视图渲染为字符串,因此我可以将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,但它引出了一个问题......为什么会出现差异?
答案 0 :(得分:3)
FindView
和FindPartialView
方法由ASP.NET MVC框架在内部首先调用useCache=true
,然后在useCache=false
内调用,如果没有找到。你也可以尝试这样做。
如果我们只是问ViewEngine.Engines,那么我会更加困惑 为了找到视图的集合,我们没有给出useCache参数:
那是因为这种方法符合我之前的解释。