c# - RazorViewEngine.FindPartialView 使用缓存。它有什么作用?

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

我需要将局部 View 呈现为字符串,这样我就可以将 Razor 语法局部 View 呈现为 Asp.net View 。该过程的一部分涉及让 View 引擎找到 View :

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(即我不希望虚拟路径提供程序在我每次请求时都搜索它), View 已经找不到了。我原以为如果没有通过缓存找到它,我们会回退到非缓存方法。

我的期望错了吗?这与混合 ViewEngine 有关吗?

更让我困惑的是,如果我们只是请求 ViewEngine.Engines 集合来查找 View ,我们不会得到 useCache 参数:

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

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

最佳答案

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

Confusing me further, if we simply ask the ViewEngine.Engines collection to find the view, we're not given a useCache parameter:

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

关于c# - RazorViewEngine.FindPartialView 使用缓存。它有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096827/

相关文章:

c# - Azure - Blob 容器上的列表操作的排序顺序

c# - 需要帮助为此场景创建正则表达式

asp.net - 在 Web 服务器场上捆绑缓存清除器

javascript - 你会推荐什么客户端javascript缓存库?

javascript - 将 Razor 页面显示为模式弹出窗口

C# 使用位域反序列化二进制结构 - 怎么做?

C# Regex - 如何验证特定单词或数字但不是两者

caching - Coldfusion 9 上的 EHCache - 我可以创建多个缓存或禁用它吗?

asp.net-mvc - MVC3 Razor URL.Action 参数值带有正斜杠。给出错误

javascript - 如何将值从 javascript 变量传递给 razor 变量?