#asp.net #postback
#asp.net #обратная отправка
Вопрос:
Моя настройка: ASP.NET Веб-сайт 4.0, работающий на IIS 6.0.
У меня есть сайт с множеством целевых страниц с виртуальными URL-адресами, все они обслуживаются одним физическим файлом landingpage.aspx (через ASP.NET Маршрутизация 4.0), в которой я использую OutputCache
директиву, кэширующую страницу на сервере в течение 24 часов.
Недавно я начал испытывать проблему, заключающуюся в том, что __doPostBack
блок JavaScript отсутствовал на некоторых сгенерированных страницах. На странице есть кнопка LinkButton (внутри webusercontrol), поэтому блок JS должен быть там, но иногда это не так. Это естественно приводит к ошибкам JS в браузере при нажатии кнопки LinkButton.
Я подозреваю, что, возможно, при первом посещении данного URL-адреса, обрабатываемого вышеупомянутым физическим файлом .aspx, это могло быть посещение клиентом (браузером или поисковым ботом), которое, возможно, было рассмотрено ASP.NET как браузер нижнего уровня, и поэтому обратная отправка не была выведена в сгенерированную кэшированную версию страницы, а затем эта неправильная кэшированная версия предоставляется всем последующим посетителям …? С другой стороны, я бы сказал ASP.NET достаточно ли умен, чтобы генерировать разные кэшированные версии для разных уровней браузеров, не так ли?
Тем не менее, мой вопрос: могу ли я найти кэшированные файлы, которые предоставляются посетителям где-то на сервере, и как-то проверить, верны ли мои предположения? Кроме того, я хотел бы отключить это ASP.NET распознавание браузеров в целом и предоставление одинакового содержимого для каждого браузера, точно так же, как это было бы для любого современного браузера.
Большое спасибо за любые советы и помощь.
Комментарии:
1. Если вы ответили на свой собственный вопрос, вы должны опубликовать ответ ниже и принять его, чтобы другим людям не нужно было пытаться без необходимости решить эту проблему.
2. Изначально я пытался это сделать, но мне не разрешили, потому что прошло всего около 2-3 часов после публикации вопроса.
3. Какой браузер был «нераспознан»? Любопытно, потому что я сталкиваюсь с такой же проблемой, но только на определенных серверах. Я предполагаю, что это как-то связано с настройками machine.config для известных браузеров — столкнувшись с проблемой, когда некоторые серверы не отображают __doPostBack для IE10, это может быть как-то связано с тем, что центр обновления Windows не был запущен до того, как IE10 был выпущен на рассматриваемых серверах, но мне любопытно, какой была ваша среда?
Ответ №1:
Отвечая на мой собственный вопрос: Подтверждено, что веб-сайт отправлял обратно HTML без __doPostBack() для нераспознанных браузеров. Добавление ClientTarget=»uplevel» в директиву @ Page в верхней части рассматриваемой страницы .aspx решило проблему, и блок __doPostBack() теперь присутствует всегда.
Комментарии:
1. У нас также была эта проблема, за исключением того, что кэширование на уровне страницы IIS сделало ее еще более запутанной. Когда браузер без скрипта посещал страницу, версия страницы без скрипта оказывалась в кэше IIS. Мы добавили ClientTarget=»верхний уровень», чтобы убедиться, что кэшированная копия страницы поддерживает скрипт. Это решило нашу проблему. Спасибо!
2. Вы также можете добавить
ClientTarget = "uplevel";
в коде позади или на некотором базовом уровне страницы и заставить его работать для каждой унаследованной страницы.