標籤:asp 命名 rgs 介面 技術分享 解決 添加 時間戳記 syn
在類庫中的資源 其他項目中要使用 需要嵌入才行
參考文獻:WebResource實現在自訂控制項中內嵌JS檔案
1. WebResource簡介
ASP.NET(1.0/1.1)給我們提供了一個開發WebControl的編程模型,於是我們擺脫了asp裡面的include模式的複用方式。不過1.0/1.1提供的Web控制項開發模型對於處理沒有image、css等外部資源的組件還算比較得心應手,script雖然很多時候也是外部資源,但在開發控制項的時候我們習慣把script使用Page.Register...Script()來嵌入模組,因為緊湊的東西更便於我們複用,用一個dll就可以解決問題。
ASP.NET 2.0提供的Web Resources管理模型,很好的解決了image、css、script等外部資源的管理問題。WebResourceAttribute是一個metedata attribute,它可以讓我們訪問到嵌入到assembly中的資源。
2. WebResource的使用
在使用內嵌的server side資源時,首先必須把資源檔Embedded內嵌到我們的assembly程式集中,然後在Application中的AssemblyInfo.cs檔案中添加上這些檔案的引用。具體過程:
① 檔案內嵌:將所要內嵌的檔案【產生操作】屬性更改為——》內嵌資源
② 檔案內嵌完成後,下面就需要對已經內嵌的檔案進行引用。
引用方法有兩種:
方法一:找到AssemblyInfo.cs檔案,添加代碼:
[assembly: WebResource("eWebapp.Upload.upLoad.js", "text/javascript")]
同時,還需要添加命名空間using System.Web.UI;
方法二:在任何一個class檔案中,均可添加引用的聲明;
[assembly: WebResource("eWebapp.Upload.upLoad.js", "text/javascript")]
(放在最進階namespace外就行)
參數說明:第一個是資源的名字,第二個是資源的mime-type名。
資源的名字命名一般包括三個部分:<預設的命名空間.><擴充命命名空間.><檔案名稱>
預設的命名空間就是項目的命名空間,檔案名稱就是資源檔的名稱。
中間擴充命名空間就是項目中的目錄結構.如果你的資源檔就在項目的根目錄下,擴充命名空間就不需要了,直接這樣寫就可以了. <預設的命名空間.> <檔案名稱>. 但是如果你在項目中產生目錄結果的話,就要使用擴充命名空間了。例如,假設以上資源檔存在目錄Js下:
[assembly: System.Web.UI.WebResource("eWebapp.Upload / js / upLoad.js ", " text/javascript ")]
③ 以上準備工作完成後,下面就可以擷取內嵌的資源檔了。
protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
{
writer.AddAttribute("onchange", "newUpload(this);");
base.AddAttributesToRender(writer);
}
注意:此段主要是為控制項追加onchange事件,也可以通過在建立介面時直接添加,如:
f.Attributes.Add("onchange", "javascript:newUpload(this);");
public class Upload : System.Web.UI.WebControls.WebControl
{
protected override void OnPreRender(EventArgs e)
{
Page.ClientScript.RegisterClientScriptInclude("upLoad", Page.ClientScript.GetWebResourceUrl(this.GetType(), "eWebapp.Upload.upLoad.js"));
base.OnPreRender(e);
}
}
④ 產生的頁面時這樣的:
<script src="/WebResource.axd?d=SfSlYQLv-RU-lSlTT0gProNFY7jkKs9lj16Lbul83Y0oicWZcUHLXICfPyGF1YsG0&t=633813613197656250" type="text/javascript"></script> |
其中的<script src="/WebResource.axd?d=...... 就是對指令碼資源的調用。
備忘:
1. 內嵌資源的檔案名稱類似eWebapp.Upload.upLoad.js
Syntax : eWebapp.Upload/ upLoad.js -->eWebapp.Upload.upLoad.js
資源名必須和AssemblyInfo.cs檔案中聲明的一樣。如果資源名錯誤或檔案不存在,在地址中產生的腳步就達不到預期結果。
2. 資源檔必須內嵌入程式集中。
3. 返回的資源檔Url分析:
WebResource.axd?d=加密後的標識符 & T = 時間戳記值。
其中:
" d " 代表請求 Web 資源。 (encrypted identifier)
" t " 是 timestamp 對程式集, 這有助於在確定如果已經對資源的變更要求。
小提示:
1、 看到網上有人說這樣不管用,原因是VS預設的命名空間搞了鬼。
問題描述:VS會自動把default namespace加到資源檔前面。
解決:只要把預設名稱空間改為空白就可以了。
但是,在研究的過程中,我並沒有碰到此問題。或許如果實在弄不成,也不知道哪裡錯了,不妨用反編譯工具Reflector來查看一下產生的資源檔是否正確。
【轉】WebResource實現在自訂控制項中內嵌JS檔案