Razor ViewEngine是否缓存渲染的HTML?

Hoo*_*ini 7 asp.net-mvc partial-views viewengine razor

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

我有一个菜单,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>
Run Code Online (Sandbox Code Playgroud)

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

@Html.Partial("Shared/_Menu", MyApplicationCache.departments) 
Run Code Online (Sandbox Code Playgroud)

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

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

pfx*_*pfx 5

PartialView得到重新呈现在每一个请求,假设你没有任何不具有OutputCacheAttribute应用上Controller还是其参与行动的方法。

如果您需要输出缓存,则需要通过 明确设置OutputCacheAttribute,请参阅文档

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

<li><a href="#">@DateTime.Now</a></li>
Run Code Online (Sandbox Code Playgroud)

完整菜单:

@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>
Run Code Online (Sandbox Code Playgroud)