【发布时间】:2019-04-28 21:06:28
【问题描述】:
我有一个 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>
这就是我在_layout.cshtml 中调用 Menu PartialView 的方式:
@Html.Partial("Shared/_Menu", MyApplicationCache.departments)
如您所见,我在所有请求中都将相同的模型(从缓存中)传递给 PartialView。
Razor ViewEngine 是否有一个内部缓存系统来识别这个视图已经为这个模型构建(符合 HTML 字符串)?或者它是否在每个请求上重新渲染(重新编译)PartialView?
【问题讨论】:
-
@DaleBurrell:非常感谢。所以阅读你的链接,我可以看到 RazorView 没有缓存任何东西......除非使用 [OutputCache]。
-
重新渲染和重新编译在 ASP.Net MVC 中非常不同。虽然这里的大多数答案都是正确的,但视图只编译一次。它被编译成一个运行时类。为所需的每个视图实例化该类,填充模型,并调用
execute()方法来创建/流式传输 HTML 到客户端。视图永远不能为每个模型缓存,因为这样做很复杂,相反,MVC 团队选择允许为每个控制器方法配置缓存。 -
@ErikPhilips,非常感谢 - 所以视图只编译一次(无论我们是否使用 OutputCache)?是execute方法将运行时类渲染成HtmlString,是渲染受益于缓存?
标签: asp.net-mvc razor partial-views viewengine