在類庫中的資源 其餘項目中要使用 須要嵌入才行javascript
參考文獻:WebResource實如今自定義控件中內嵌JS文件 css
1. WebResource簡介java
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中的資源。app
2. WebResource的使用ide
在使用內嵌的server side資源時,首先必須把資源文件Embedded內嵌到咱們的assembly程序集中,而後在Application中的AssemblyInfo.cs文件中添加上這些文件的引用。具體過程:工具
① 文件內嵌:將所要內嵌的文件【生成操做】屬性更改成——》嵌入的資源this
② 文件內嵌完成後,下面就須要對已經內嵌的文件進行引用。加密
引用方法有兩種:spa
方法一:找到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 對程序集, 這有助於在肯定若是已經對資源的更改請求。
小提示:
一、 看到網上有人說這樣無論用,緣由是VS默認的命名空間搞了鬼。
問題描述:VS會自動把default namespace加到資源文件前面。
解決:只要把默認名稱空間改成空就能夠了。
可是,在研究的過程當中,我並無碰到此問題。或許若是實在弄不成,也不知道哪裏錯了,不妨用反編譯工具Reflector來查看一下生成的資源文件是否正確。