ASP.NET 4.0: отсутствует блок JavaScript __doPostBack на странице с установленным выходным кэшем - PullRequest
3 голосов
/ 04 ноября 2011

Мои настройки: веб-сайт ASP.NET 4.0, работающий на IIS 6.0.

У меня есть сайт со многими целевыми страницами с виртуальными URL-адресами, и все они обслуживаются одним физическим файлом landingpage.aspx (через маршрутизацию ASP.NET 4.0), в котором я использую директиву OutputCache, кэширующую страницу на сервер на 24 часа.

Недавно у меня возникла проблема, связанная с отсутствием блока JavaScript __doPostBack на некоторых сгенерированных страницах . На странице есть LinkButton (внутри webusercontrol), поэтому там должен быть блок JS, но иногда его нет. Это естественным образом приводит к ошибкам JS в браузере после нажатия кнопки LinkButton .

Мое подозрение заключается в том, что, возможно, при первом посещении данного URL-адреса, обработанного вышеупомянутым физическим файлом .aspx, это могло быть посещение клиентом (браузером или поисковым ботом), которое, возможно, рассматривалось ASP.NET. как браузер нижнего уровня, и, следовательно, doPostBack не был выведен в сгенерированную кэшированную версию страницы, а затем эта неправильная кэшированная версия предоставляется всем последующим посетителям ...? С другой стороны, я бы сказал, что ASP.NET достаточно умен, чтобы генерировать разные кэшированные версии для разных уровней браузеров, не так ли?

Тем не менее мой вопрос таков: могу ли я найти кэшированные файлы, которые предоставляются посетителям где-то на сервере, и каким-то образом проверить, верны ли мои предположения? Кроме того, я хотел бы полностью отключить это распознавание браузеров ASP.NET и предоставлять одинаковый контент каждому браузеру так же, как и любому современному браузеру.

Большое спасибо за любые советы и помощь.

1 Ответ

4 голосов
/ 07 ноября 2011

Отвечая на мой собственный вопрос: подтвердил, что веб-сайт отправлял обратно HTML без __doPostBack () для нераспознанных браузеров.Добавление ClientTarget = "uplevel" в директиву @ Page в верхней части рассматриваемой страницы .aspx решило проблему, и теперь всегда присутствует блок __doPostBack ().

...