雖然ASP.NET的服務器控件一直被你們所詬病,可是用戶控件(ACSX)在某些場景下仍是很是有用的。服務器
在一些極特珠的狀況下,咱們會使用JavaScript動態的構建頁面中的控件,但假設遇到了我要用JavaScript構建一個服務端控件、用戶控件時,該怎麼辦?
spa
咱們經常說,服務端控件運行在服端器上,那麼這話是什麼意思呢?3d
服務端控件,其本質是一構建HTML語句的封裝,以事先編排好的方式,生成一套HTML並經過Http協議返回給客戶端。所以,咱們所寫的服務端控件,在響應HTTP請求時,早已不存在了。——這就叫運行在服務器上ip
即然如此,那麼客戶端天然沒有解析一個服務端控件的可能。get
根據上面的原理,咱們能夠得知,直接經過JavaScript向body中輸出一個服務端控件毫無心義。iframe
那麼咱們換一個思路,即然服務端控件的構建必定要經過WEB服務器,那麼咱們可不能夠經過一次HTTP請求,而且在不破壞當前面頁的狀況下,獲得服務端控件所轉換後的HTML原碼呢?it
有了這個思路,那麼解決方案就很簡單了——iframe原理
咱們能夠單獨設立一個ASPX頁面,該頁面的BODY上主要就是服務端控件,而後經過IFRAME的加載,將這個服務端控件顯示在了當前的頁面中。請求
固然,這只是一種效果,它並無真正意義上用JavaScript構建了一個服務端控件。而是構建了一個只包含了服務端控件的iframe。客戶端
若是變通一下的話,能夠經過一些JavaScript代碼,將這個iframe中的全部元件,添加到主頁面裏,並移除iframe,這樣,就成爲了一個總體的頁面,只不過可能會面臨一些控件ID衝突的結果。
文章爲做者原創,轉載請註明出處 http://www.zizhusoft.com/note/show.aspx?id=f562b47a-ddd0-4771-a93d-78e9fdbd7b72 ,謝謝合做