【轉】WebResource實如今自定義控件中內嵌JS文件

在類庫中的資源  其餘項目中要使用 須要嵌入才行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&amp;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來查看一下生成的資源文件是否正確。

相關文章
相關標籤/搜索