Razor View Engine 是否缓存渲染的 HTML?

2024-02-19

我有一个 2 级菜单项:我有一个部门列表,每个部门都有一个商店列表。

我有一个 Menu,PartialView,它迭代Model(部门)并构建菜单:

@model IEnumerable<Department>

<ul>
    @foreach (var department in Model)
    {
        <li>
            <a href="#">@Model.DepartmentName</a>
            <ul>
                @foreach (var store in department.Stores)
                {
                    <li><a href="some-url">@store.StoreName</a></li>
                }
            </ul>
        </li>
    }
</ul>

这就是我在我的菜单中调用 Menu PartialView 的方式_layout.cshtml:

@Html.Partial("Shared/_Menu", MyApplicationCache.departments) 

正如您所看到的,我在所有请求上将相同的模型(从缓存)传递到 PartialView。

Razor ViewEngine 是否有一个内部缓存系统来识别该视图已经为此模型构建(符合 HTML 字符串)?或者它是否会在每个请求上重新渲染(重新编译)PartialView?


The PartialView假设您没有任何请求,则会在每个请求时重新渲染OutputCacheAttribute应用于Controller或其所涉及的动作方法。

如果您需要输出缓存,则需要通过显式设置OutputCacheAttribute,参见文档 https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/improving-performance-with-output-caching-cs.

您可以通过输出轻松检查这一点DateTime,例如。通过菜单项,如下所示。
每次请求时,它都会显示一个新值,证明它已重新渲染。

<li><a href="#">@DateTime.Now</a></li>

完整菜单:

@model IEnumerable<Department>

<ul>
    @foreach (var department in Model)
    {
        <li>
            <a href="#">@Model.DepartmentName</a>
            <ul>
                <li><a href="#">@DateTime.Now</a></li>
                @foreach (var store in department.Stores)
                {
                    <li><a href="some-url">@store.StoreName</a></li>
                }                
            </ul>
        </li>
    }
</ul>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Razor View Engine 是否缓存渲染的 HTML? 的相关文章

随机推荐