我知道为什么当前需要runat =“server”(ASP.NET why runat="server"),但大家一致认为如果你在设计中加入一个简单的默认值就不应该要求它(我当然同意)。
是否可以修改,扩展,反编译和重新创建,拦截或以其他方式更改ASP.NET解析ASPX和ASCX文件的行为,以便不再需要runat =“server”?例如,我假设Mono的一个版本可以分支以实现这个目标。
如果特定要求有用,下面重点介绍一种设计:
答案 0 :(得分:0)
据我所知,ASP.NET页面处理过程中没有足够深的钩子允许这样做。我知道无法覆盖或扩展实际的aspx / ascx代码的解析或处理。
虽然ASP.NET相当灵活,并允许您覆盖许多默认行为(如ViewState的保存/加载方式,存储Session的位置等),但这不是其中之一。
但是......从技术上讲,Page对象只是另一个HttpHandler。您可以编写处理程序并使用它执行任何操作。您所要做的就是实现Page类所做的一切,然后抛出这个额外的功能。 :)或者,拉出Reflector并挖掘Page对象的ProcessRequest方法,看看它实际解析/初始化aspx中声明的对象的位置,你可能会得到如何实现你正在寻找的功能的线索。但我怀疑你是在浪费你的时间。
答案 1 :(得分:0)
我担心你必须修改整个页面解析器来完成这个,我认为这不可行。
另一方面,您应该能够创建自己的。请参阅buildProviders Element和BuildProvider class。您应该能够为.aspx页面创建自己的构建提供程序,并使用它来替换内置提供程序。
不幸的是,ASP.NET使用的PageBuildProvider
类是内部的,它用于解析页面的PageParser
类是sealed
。你完全靠自己。
考虑到runat="server"
已经在ASP.NET中存在了十年,我想你会发现这不会很快改变。
你也会失去设计师支持,但也许你不关心它。