我正在使用ASP.Net MVC 3 RC 2中的Razor视图引擎。以下是我的视图中的一部分city.cshtml
(为了简单起见,示例中的代码已经被大幅简化)
<!-- in city.cshtml -->
<div class="list">
@foreach(var product in SQL.GetProducts(Model.City) )
{
<div class="product">
<div>@product.Name</div>
<div class="category">
@foreach(var category in SQL.GetCategories(product.ID) )
{
<a href="@category.Url">@category.Name</a> »
}
</div>
</div>
}
</div>
我想使用OutputCache属性缓存我的输出的一部分,因此我创建了一个带有启用OutputCache属性的ProductList
操作。
<!-- in city.cshtml -->
<div class="list">
@Html.Action("ProductList", new { City = Model.City })
</div>
我在
ProductList.cshtml
中创建了以下视图:<!-- in ProductList.cshtml -->
@foreach(var product in Model.Products )
{
<div class="product">
<div>@product.Name</div>
<div class="category">
@foreach(var category in SQL.GetCategories(product.ID) )
{
<a href="@category.Url">@category.Name</a> »
}
</div>
</div>
}
但我仍然需要在每个产品上缓存类别路径输出。因此,我创建了一个带有启用OutputCache
属性的操作CategoryPath
<!-- in ProductList.cshtml -->
@foreach(var product in Model.Products ){
<div class="product">
<div>@product.Name</div>
<div class="category">
@Html.Action("CategoryPath", new { ProductID = product.ID })
</div>
</div>
}
但显然这是不允许的。我收到了以下错误信息:
OutputCacheAttribute 不允许在已被缓存的子操作的子操作上使用。
我相信他们有充分的理由禁止这样做。我真的想要这种嵌套的输出缓存。
有没有绕过的方法?