【轉】WebResource實現在自訂控制項中內嵌JS檔案

來源:互聯網
上載者:User

標籤: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&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 對程式集, 這有助於在確定如果已經對資源的變更要求。

 

小提示:

1、  看到網上有人說這樣不管用,原因是VS預設的命名空間搞了鬼。

問題描述:VS會自動把default namespace加到資源檔前面。

解決:只要把預設名稱空間改為空白就可以了。

但是,在研究的過程中,我並沒有碰到此問題。或許如果實在弄不成,也不知道哪裡錯了,不妨用反編譯工具Reflector來查看一下產生的資源檔是否正確。

【轉】WebResource實現在自訂控制項中內嵌JS檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.