2010-05-05 21 views
2

我知道爲什麼runat =「server」目前是必需的(ASP.NET why runat="server"),但共識是如果你在設計中加入一個簡單的默認值(當然我同意)它不應該被要求。是否有可能修改ASP.NET以不再需要runat =「server」?

是否可以修改,擴展,反編譯和重新創建,攔截或以其他方式更改ASP.NET解析ASPX和ASCX文件的行爲,以便不再需要runat =「server」?例如,我假設Mono的一個版本可以分支來實現這個目標。

如果具體要求是有幫助的,以下亮點一體式設計:

  • 在分析時,當遇到配置的名稱空間標籤(如「ASP」),默認元素的RUNAT屬性設置爲「服務器」
  • 在分析過程中,遇到已配置的命名空間標記(例如「asp」)時,如果元素的runat屬性值可用,則應該使用該值代替默認值
  • 引入了新的頁面級設置在page指令或web.config中設置),它指定a的缺省runat值特定的命名空間標記
+0

只要感謝showat =「客戶」是不需要的。我的問題從* 4月1日* 2010年:http://stackoverflow.com/questions/2561964/ – 2010-05-05 18:27:31

+1

整個事情糟透了。我更喜歡ASP.NET MVC。 – 2010-05-05 18:28:07

回答

0

恐怕你不得不修改整個頁面解析器來完成這個,我不認爲這是可能的。

另一方面,你應該能夠創建自己的。請參閱buildProviders ElementBuildProvider class。您應該能夠爲.aspx頁面創建自己的構建提供程序,並使用它來替換內置的提供程序。

不幸的是,ASP.NET使用的PageBuildProvider類是內部類,而用於解析頁的PageParser類是sealed。你將完全依靠你自己。

想想runat="server"已經在ASP.NET中使用了十年了,我想你會發現這不會很快改變。

你也會失去Designer支持,但也許你不關心這一點。

+0

對,不是很關心Designer支持..那麼你是否同意,如果PageParser和PageBuildProvider類被反編譯並重新組裝成新項目/修改過,那麼這可能會起作用?我知道這可能不合法,因爲[Microsoft .NET Framework Redistributable EULA](http://msdn.microsoft.com/zh-cn/library/ms994405.aspx),但我想知道是否會出現這種情況理論。謝謝 – sean2078 2010-05-10 16:24:08

0

據我所知,ASP.NET頁面處理過程中沒有足夠深的鉤子可以允許這樣做。我知道無法覆蓋或擴展實際的aspx/ascx代碼的解析或處理。

雖然ASP.NET非常靈活,並且允許您覆蓋許多默認行爲(如ViewState如何保存/加載,Session存儲位置等),但這不是其中之一。

但是......從技術上講,Page對象只是另一個HttpHandler。你可以寫你的處理程序,並用它做任何你想要的。你所要做的就是實現Page類所做的一切,然後拋出這個額外的功能。 :)或者,拉出Reflector並挖掘Page對象的ProcessRequest方法,並查看它實際解析/初始化aspx中聲明的對象的位置,並且可能會知道如何實現要查找的功能。但我懷疑你會浪費你的時間。

相關問題