Sitecore: включение HTML-кэширования блокирует поведение обратной передачи - PullRequest
4 голосов
/ 02 сентября 2010

У меня есть страница sitecore с раскрывающимся списком ASP, и данные в форме заполняются из выбранного значения раскрывающегося списка.При изменении выбранного элемента в раскрывающемся списке выполняется обратная передача.При обратной передаче новый выбранный элемент добавляется в строку запроса, и пользователь перенаправляется (для возможности связывания).

Недавно я включил кэширование HTML (для всех подуровней «Варьировать по строке запроса»), а теперь неожиданноэтот механизм больше не работает.Кажется, что происходит, когда я выбираю новый выпадающий элемент, появляется страница для отправки назад (хотя, если я отлаживаю, ни одна из моих точек останова не будет достигнута).После этого, если я снова изменю выбранный элемент, я вижу в Firebug сообщение «__doPostBack не определен», что, по-видимому, означает, что сгенерированный ASP ASP JavaScript не добавляется на страницу.

Ответы [ 2 ]

4 голосов
/ 02 сентября 2010

Включение кэширования для подслоя означает, что вы полностью обходите код, а Sitecore просто обслуживает тот же HTML, который был сгенерирован ранее.Так что ведёт себя так, как задумано.Другими словами, это не тот сценарий, в котором вы можете воспользоваться преимуществами кэширования подслоя.

0 голосов
/ 04 октября 2016

Как сообщалось ранее, это ожидаемое поведение именно потому, что страница выбирается из кэша.Вы все еще можете поддерживать кэширование для загрузок без обратной передачи, но самый простой способ, который я нашел, - это определить обратную передачу с помощью кода в Global.asax и переключаться соответствующим образом, как в примере ниже.



    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (context.Request.RequestType.Equals("POST"))
        {
            context.Response.Cache.SetNoServerCaching();
            return "POST " + DateTime.Now.Ticks + " " + context.Request.RawUrl;
        }

        switch (custom)
        {
            case "RAWURL":
                return context.Request.RawUrl;
            default:
                return "";
        }
    }

Затем вы можете подключить это к директивам кэша вывода в ваших элементах управления:

<% @ outputcache duration = "3600" varbybyparam = "none" varbybycustom = "RAWURL"%>

Обратите внимание, что если вы сделаете это таким образом, вы потеряете возможность легко варьироваться в зависимости от источника данных элемента управления.

...