關於使用者控制項中檔案鏈結的處理

2021-08-24 18:54:57 字數 1167 閱讀 2134

最近在開發**,大量用到了使用者控制項,遇到了乙個棘手的問題。使用者控制項在**中的路徑在使用中是跟隨的母頁的路徑。由於各個頁面都可能使用同一使用者控制項,所以其實際路徑各不相同。這對引用js/css/帶來了困擾。

我原來的作法是:在所屬頁面統一載入js/css,但是這好象不符合oo原則,增加了頁面與使用者控制項間的耦合。於是想有沒有什麼其它的方法。

引用可以通過在頁面嵌入

<%=resolveurl(url)%>
來解決,但js/css則不能這樣。因為同一頁面可能會引用不同的使用者控制項,不同的使用者控制項又可能會引用同一js/css,這會導致同一js/css在最終生成的頁面上被載入多次。在網上搜了搜,有種解決方法,就是在使用者控制項的onprerender事件(或其它合適事件)內通過對page.header物件進行判斷來決定是否載入,如果沒有載入,則將""封裝到乙個literal控制項內,然後將些控制項載入到header中。呵呵,好是好,就是覺得太麻煩了。後來本人想來想去,發現了乙個更簡單的方法:page類內有個clientscript類,有個registerclientscriptblock方法,作用是向頁面註冊js**。那我能不能把上面這調動js的html**放進去呢。事實證明是可以的:

page.clientscript.registerclientscriptblock(page.gettype(), resolveurl("url"), ";", true);

不過有幾點需要注意:

1.使用者控制項本身是沒有clientscript類的,需要引用page.

2.在註冊型別時,是page.gettype(),而不是一般的gettype(),原因請自行思考

3.在這裡key引數是本js/css的路徑,而同一頁面相對於js/css的相對路徑是一致的,那麼即使後台註冊多次,這個key值也是一致的。而所有使用者控制項所屬的page也是一致的,所以page.gettype()也是一致的。type與key對於同一js/css都是一致的,那麼無論後台註冊多少次,前台都只會註冊一次。

但是這個方法是有缺點的:

registerclientscriptblock方法會在標籤後註冊指令碼,而不是頭部。這樣的話如果在頭部寫的js需要後面js的支援,則會報錯。解決方法是遵守乙個原則:誰需要,誰呼叫。即:使用者控制項只載入使用者控制項需要的js/css,頁面載入頁面需要的js/css,但是如果使用者控制項與頁面都需要同一js/css,哎~~沒辦法了,這就非要載入兩次了

richtextbox 中關於中文鏈結的亂碼解決

最近在實現乙個類似qq樣的東東.和richtextbox打了不少交道,目前解決了一部分問題,在插入中文鏈結時 會導致整個richtextbox的中文內容出現亂碼.這個問題其實還是編碼引起的.一開始時我也在網上找了一段時間,卻發現沒有相應的方案來處理.public void insertlink st...

Linux中檔案的硬鏈結和軟鏈結

硬鏈結檔案 不同檔名具有相同節點 inode 號 硬鏈結建立 ln 原始檔 軟鏈結檔案 這個檔案上只要有乙個硬鏈結檔案或乙個以上的硬鏈結檔案就不會被刪除,當所有的硬鏈結檔案被刪除時,這個檔案就會被刪除 linux中的軟鏈結檔案就類似於 windows 系統中的快捷方式 ln s 原始檔 軟鏈結檔案 ...

python中檔案的處理

二 讀寫文字 import os r 防止字元轉義 path r e downloads 2018 nuclear recognition stage1 train files os.listdir path print len files from os import listdir,path,m...