<img
src="/SWS35/WebResource.axd?d=UoDB4h0Q5F6IGhlOeP9UpC...">
<script
src="/SWS35/WebResource.axd?d=KknCFrZBRSiOd8El3l1gbw2..."
type="text/javascript">
不用懷疑你直覺的想法,這兩個語法就是直接將圖片跟JavaScript檔案載入到Client端,
過去我們會直接在src的地方,用一個路徑+檔名的寫法,直接指名某一個檔案,
但是如果我們今天開發的是一個共用的Control呢?
每個專案所使用的路徑又不同,我們要將這一些檔案放在哪裡呢?過去我們可能會將它統一放置於\wwwroot\aspnet_client下面。
但是這樣的做法,造成我們在更新元件版本時,除了要更新dll以外,還要去更新aspnet_client下面的檔案,實在有點不方便。
所以在asp.net 2.0上就衍生出了WebResource的機制。
WebResource.axd他不是一個實體檔案,它只是一個虛擬的檔案而已。
因為他,所以我們可以很輕鬆的將一些Resource綁在DLL上面。(例如圖片、javascript file、css file...等。)
用法也很簡單,如下步驟:
Step 1:只要將該檔案加入Control的專案內,
Step 2:設定該檔案的"建置動作"屬性為"內嵌資源"
如下圖:
Step 3:在專案的\My Project\AssemblyInfo.vb檔中,加入下面程式碼
'定義WegResource
<Assembly:
System.Web.UI.WebResource("MyWebControls.CustomGridView.js",
"text/javascript", PerformSubstitution:=True)>
MyWebControls是你的Namespace(一般預設是你的專案名稱)
CustomGridView.js是你的檔案名稱。(包含附檔名)
Step 4:利用下面語法載入檔案
Me.Page.ClientScript.RegisterClientScriptResource(Me.GetType, "MyWebControls.CustomGridView.js")
這樣就可以輕鬆載入JS檔了
當然你也可以載入CSS、圖片...等。做法大同小異。只要在Step 4上面有所不同而已。
可以參考http://support.microsoft.com/kb/910442/zh-tw
另外有一點要注意的事情是,檔案的caching問題,
利用封包監測軟體去看,我們會發現,
以前我們直接指定檔名的時候,在browse沒有特殊設定的情況下,它的檔案只會在第一次瀏覽時才會下載,
但是用了WebResource之後,你會發現他怎麼每次postback都下載一次呢?
這樣不是很耗用網路頻寬嗎?
其實要去catch住他是很簡單的,
只要在Web Config檔中,將debug設定為false就可以了。
這樣的機制對於在開發的時候,是很有幫助的,不用怕JS檔案被catch住。但是在上線時就一定要更改為web config的debug屬性唷!
(雖然這是一般的資安規定都會要求的,但是還是很多人沒有這樣做。)
詳細大家可以參考下面網址
http://tech.blog.oceg.org/2006/06/aspnet-20-webresourceaxd-and-browser.html
沒有留言:
張貼留言