Кэширование вывода на PartialViews не работает - PullRequest
1 голос
/ 18 августа 2011

Выходное кэширование на действиях основного контроллера, кажется, работает нормально, но для PartialViews они не работают должным образом.

Я добавил атрибут в одно из частичных представлений, отладил его.Я постоянно бью точку останова внутри метода (что, я думаю, означает, что кэширование вывода не работает).Я попытался предоставить параметры, профили кэширования, включить кэширование выходных данных и фрагменты, но тот же эффект.Что-то еще мне не хватает?

[ValidateInput(false)]
        [OutputCache(Duration = 60000, VaryByParam = "componentId;")]
        public PartialViewResult NewCategoryComboPartial(string componentId)
        {
            //ComponentId
            ViewData[ControllerEnums.GlobalViewDataProperty.ComponentId.ToString()] = componentId;

            //ViewModel
            ViewData[ControllerEnums.GlobalViewDataProperty.ProfileComponentCategories.ToString()] = GetComponentCategoriesList();

            return PartialView("~/Views/Compliance/Profile/Partials/NewCategoryCombo.ascx");
        }

Это из-за существующего фильтра действий?ValidateInputAttribute?Мой PartialView ()?

Заранее спасибо.

ОБНОВЛЕНИЕ:

Ниже приведен фрагмент кода из основного представления о том, как объявляется частичное представление.

        <div id="compliance-navigation-control">
            <% Html.RenderPartial("~/Views/Shared/Compliance/ComplianceNavigationControl.ascx", Model.PandCRecord); %>
        </div>

Ниже приведено содержание частичного вида

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%@ Import Namespace="atp.webnav.Web.Controllers" %>
<%@ Import Namespace="atp.webnav.Web.Utilities" %>

<% Html.DevExpress().ComboBox(x =>
        {
            x.Name = "categoryComboBox_" + ViewData[ControllerEnums.GlobalViewDataProperty.ComponentId.ToString()].ToString();  
            x.Theme = "Glass";
            x.Width = Unit.Percentage(100);
            x.Properties.ValueType = typeof(string);
            x.Properties.TextField = "Name";
            x.Properties.ValueField = "Id";
            x.SelectedIndex = 0;
            x.Properties.DropDownStyle = DropDownStyle.DropDown;
            x.Properties.MaxLength = 30;
            x.Properties.IncrementalFilteringMode = IncrementalFilteringMode.StartsWith;
            x.Properties.AllowUserInput = true;
            x.CallbackRouteValues = new {Controller = "Profile", Action = "NewCategoryComboPartial"};
            x.Properties.EnableCallbackMode = true;
            x.Properties.CallbackPageSize = 1000;
            x.Properties.ClientSideEvents.BeginCallback = "webnav.compliance.profile.categoryComboBox_OnBeginCallback";
            x.Properties.ClientSideEvents.SelectedIndexChanged = "webnav.compliance.profile.categoryComboBox_OnSelectedIndexChanged"; 
            x.Properties.ClientSideEvents.EndCallback = "webnav.compliance.profile.categoryComboBox_OnSelectedIndexChanged"; 
            x.Properties.ClientSideEvents.CallbackError = DevExpressGridViewHelper.HandleCallbackErrors;

            x.Properties.EnableSynchronizationOnPerformCallback = true;
        })
        .BindList(ViewData[ControllerEnums.GlobalViewDataProperty.ProfileComponentCategories.ToString()])
        .Render();     
%>

По сути, этот комбинированный список является комбинированным списком devexpress, который имеет функции автозаполнения.Он использует обратные вызовы к действиям контроллера, чтобы получить данные, основанные на выбранном значении.Я пытаюсь увидеть, могу ли я кешировать результаты обратного вызова.Благодаря.

1 Ответ

2 голосов
/ 18 августа 2011

Как ты это называешь? Используя Html.Partial или Html.Action (как дочернее действие)?

Цитирование из Кэширование кольцевой дыры в ASP.NET MVC

«метод Html.RenderPartial игнорирует любые директивы OutputCache в пользовательском элементе управления представления» поэтому используйте Html.Action / Html.RenderAction. Как говорится здесь Кэширование ChildActions с использованием профилей кэша не будет работать использует параметры Duraction и, при необходимости, VaryByParam. Профиль не будет работать.

...