Я использую Razor вид двигатель в ASP.Net MVC 3 RC 2. Это часть моего зрения city.cshtml
кэширование Уплотненного частичного выхода в ASP.NET MVC 3
(значительно упрощен код для простоты в пример)
<!-- 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 атрибута, поэтому я создал действие ProductList
с OutputCache
атрибут включен
<!-- 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>
}
, но мне еще нужно кэшировать категории путь выход на каждом продукте. поэтому я создал действие CategoryPath
с OutputCache
атрибут включен
<!-- 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 is not allowed on child actions which are children of an already cached child action.
Я считаю, что у них есть веская причина, по которой они должны запретить это. Я действительно хочу такого типа Вложенное кэширование выходных данных.
Любая идея обходного решения?
[Посмотрите эту ссылку] (http://blog.stevensanderson.com/2008/10/15/partial-output-caching-in-aspnet-mvc/) – Korayem