2

我知道为什么当前需要 runat="server" (ASP.NET 为什么 runat="server"),但一致认为如果您在设计中加入简单的默认设置,则不需要它(我当然同意)。

是否可以修改、扩展、反编译和重新创建、拦截或以其他方式更改 ASP.NET 解析 ASPX 和 ASCX 文件的行为,从而不再需要 runat="server"?例如,我假设可以对 Mono 的一个版本进行分支来实现这个目标。

如果特定要求有帮助,以下重点介绍一种设计:

  • 解析时遇到配置的命名空间标签(如“asp”),默认元素的runat属性为“server”
  • 在解析过程中,当遇到配置的命名空间标签(例如“asp”)时,如果元素的 runat 属性值可用,则应使用该值代替默认值
  • 引入了新的页面级设置(可以在页面指令或 web.config 中设置),指定特定命名空间标记的默认 runat 值
4

2 回答 2

0

据我所知,在 ASP.NET 页面处理过程中没有足够深的钩子允许这样做。我知道无法覆盖或扩展实际 aspx/ascx 代码的解析或处理。

虽然 ASP.NET 相当灵活,并且允许您覆盖许多默认行为(例如如何保存/加载 ViewState,存储 Session 的位置等),但这不是其中之一。

但是...从技术上讲,Page 对象只是另一个 HttpHandler。你可以编写你的处理程序并用它做任何你想做的事情。您所要做的就是实现 Page 类所做的一切,然后加入这个额外的功能。:) 或者,拉出 Reflector 并深入研究 Page 对象的 ProcessRequest 方法,看看它实际上在哪里解析/初始化在 aspx 中声明的对象,您可能会知道如何实现您正在寻找的功能。但我怀疑你会浪费你的时间。

于 2010-05-06T00:50:09.707 回答
0

恐怕您必须修改整个页面解析器才能完成此操作,我认为这是不可能的。

另一方面,您应该能够创建自己的。请参阅buildProviders 元素BuildProvider 类。您应该能够为 .aspx 页面创建自己的构建提供程序,并使用它来替换内置提供程序。

不幸的是,PageBuildProviderASP.NET 使用的类是内部的PageParser,它用来解析页面的类是sealed. 你将完全靠自己。

考虑到runat="server"ASP.NET 已经存在十年了,我想您会发现这不会很快改变。

你也会失去设计师的支持,但也许你不在乎。

于 2010-05-06T01:03:42.917 回答