Прежде всего, "__DoPostBack" вставляется элементами управления, которые могут вызвать обратную передачу, например DropDownList, для свойства AutoPostBack которого задано значение true. Поскольку ScriptManager в основном перехватывает традиционные обратные передачи, я считаю, что это причина для вставки функции.
-- Далее я просто думаю... :)
Теперь о перемещении всего во внешний файл. Это непросто, но «может быть» возможно. Проблема в том, что ASP.NET генерирует сценарии во время выполнения, поэтому вы ничего не можете с этим поделать статически. Что вам нужно учитывать, так это то, почему вы хотели бы сделать это в первую очередь. Дело в том, что большая часть генерируемого скрипта является динамической, что затрудняет его кеширование. Но если вам действительно нужно, вам следует взглянуть на HttpHandlers и HttpModules.
По сути, вам нужно каким-то образом извлечь каждый тег script (без набора атрибутов src). Это можно сделать в HttpModule в событии BeginRequest HttpContext. Теперь вам нужно извлечь всю необходимую информацию и заменить ее ссылкой на конкретный HttpHandler, который может служить заменой. Но чтобы вообще что-то изменилось, вам необходимо выполнить какое-то кэширование существующего скрипта. Вероятно, вы могли бы использовать для этого кэш ASP.NET. Сложность заключается в том, чтобы сравнить существующую запись кэша с новой и определить, следует ли получать кэшированную версию (указывая HttpHandler на существующую запись) или создавать новую запись. Если у вас много скриптов, скорее всего, это будет довольно дорогая операция. Кроме того, вам необходимо определить, может ли клиент кэшировать самостоятельно (электронные теги и т. д. могут пригодиться). Важно, чтобы клиент каждый раз избегал загрузки одних и тех же ненужных скриптов (думаю, это ваша конечная цель?).
Итак, резюмируя:
- Создайте HttpModule, чтобы позаботиться о перезаписи страницы и помещении извлеченного скрипта в какой-то кеш (например, кеш ASP.NET).
- Создайте HttpHandler, чтобы он указывал на извлеченный скрипт (он должен передавать содержимое из кеша). Обработчик должен быть помещен вместо извлеченных встроенных скриптов.
- Создайте какой-нибудь алгоритм для определения недействительности кеша. Я не знаю, что за сценарий может меняться между запросами.
Кстати. Экстернализация скрипта в лучшем случае сложна, поэтому вам нужно быть осторожным, чтобы не внести ошибки, которые невозможно исправить;)
Не точное решение, но я пытался сделать это сам раньше безуспешно... в основном из-за слишком мало времени. Когда вам платят за выполнение задачи, такая оптимизация не может быть оправдана... :(
person
Siewers
schedule
09.10.2009
__doPostBack
(и__EVENTARTGET
и__EVENTARGUMENT
скрытые поля формы)! Вот пример того, как это может произойти: forums.asp.net/p/335942/335994 .aspx - person Crescent Fresh   schedule 30.09.2009