Можно ли изменить ASP.NET, чтобы больше не требовать runat = "server"? - PullRequest
2 голосов
/ 05 мая 2010

Я знаю, почему в настоящее время требуется runat = "server" ( ASP.NET why runat = "server" ), но единодушным является то, что это не требуется, если вы включаете простое значение по умолчанию дизайн (согласен конечно).

Можно ли изменить, расширить, декомпилировать и воссоздать, перехватить или иным образом изменить поведение того, как ASP.NET анализирует файлы ASPX и ASCX, так что runat = "server" больше не требуется? Например, я предполагаю, что версия Mono может быть разветвлена ​​для достижения этой цели.

В случае, если особые требования являются полезными, следующие конструкции выделяют один дизайн:

  • Во время синтаксического анализа, когда встречаются настроенные теги пространства имен (например, «asp»), по умолчанию свойство runat элемента имеет значение «server»
  • Во время синтаксического анализа, когда встречаются настроенные теги пространства имен (например, «asp»), если доступно значение свойства runat элемента, то это значение следует использовать вместо значения по умолчанию
  • Введена новая настройка на уровне страницы (может быть задана в директиве page или web.config), которая задает значение runat по умолчанию для определенного тега пространства имен

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Боюсь, что для этого вам придется изменить весь анализатор страниц, и я не думаю, что это возможно.

С другой стороны, вы сможете создавать свои собственные. См. элемент buildProviders и класс BuildProvider . Вы должны иметь возможность создать свой собственный поставщик сборки для страниц .aspx и использовать его для замены встроенного поставщика.

К сожалению, класс PageBuildProvider, используемый ASP.NET, является внутренним, а класс PageParser, используемый для анализа страниц, - sealed. Вы будете полностью самостоятельно.

Учтите, что runat="server" был в ASP.NET уже десять лет, и я думаю, вы увидите, что это не изменится в ближайшее время.

Вы бы также потеряли поддержку Дизайнера, но, возможно, вас это не волнует.

0 голосов
/ 06 мая 2010

Насколько я знаю, в процессе обработки страниц ASP.NET нет достаточно глубоких зацепок, которые бы позволили это сделать. Я не знаю способа переопределить или расширить парсинг или обработку фактического кода aspx / ascx.

Хотя ASP.NET достаточно гибок и позволяет переопределять многие поведения по умолчанию (например, способ сохранения / загрузки ViewState, место хранения Session и т. Д.), Это не один из них.

Однако ... технически объект Page - это просто еще один HttpHandler. Вы можете написать свой обработчик и делать с ним все, что захотите. Все, что вам нужно сделать, это реализовать все, что делает класс Page, а затем добавить эту дополнительную функциональность. :) В качестве альтернативы, вытащите Reflector и покопайтесь в методе ProcessRequest объекта Page и посмотрите, где он в действительности анализирует / инициализирует объекты, объявленные в aspx, и вы можете получить представление о том, как реализовать нужную вам функциональность. Но я подозреваю, что вы зря тратите время.

...