为什么要嵌入资源?
我们可以在程序集中嵌入js,图像,css文件.
将所依赖的资源嵌入至一个单独的程序集中,可以使程序集的用户不用担心是否已将js,图像,css文件置于某个文件夹下,是否设置了相应的权限.
一、如何在程序集中嵌入js脚本
1.创建程序集
新建类库,命名为JsLib.并添加对System.Web的引用,然后建立目录script,如下图:
2.创建js代码
在script文件夹下创建MyJs.js文件,内容代码如下:
//经典代码 function sayHello() { alert("Hello World!"); }
3.设置js文件为嵌入的资源
右键MyJs.js文件,选择属性,设置生成操作为:嵌入的资源.
4.创建类,用于注册js
创建类MyControl.cs,该类继承自Control,用于注册js.代码如下:
namespace JsLib { public class MyControl : System.Web.UI.Control { protected override void OnPreRender(EventArgs e) { this.Page.ClientScript.RegisterClientScriptResource(typeof(MyControl), "JsLib.script.MyJs.js"); base.OnPreRender(e); } } }
5.在程序集中注册js文件
在当前程序集的AssemblyInfo下注册js文件,加入如下语句:
[assembly: System.Web.UI.WebResource("JsLib.script.MyJs.js", "application/x-javascript")]
至此,已经完成了在程序集中嵌入js资源.使用代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="TestConfig_Default2" %> <%@ Register Assembly="JsLib" Namespace="JsLib" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <cc1:MyControl ID="MyControl1" runat="server"> </cc1:MyControl> <script type="text/javascript"> window.attachEvent("onload", sayHello); </script> </form> </body> </html>
二、如何在程序集中嵌入图片
接上例,在程序集中建一个文件夹,命名为images,在image文件夹中放入一个图片1.jpg.接上例的第3步.
4.将图片设置为嵌入资源
5.在程序集中注册该图片文件
[assembly: System.Web.UI.WebResource("JsLib.images.1.jpg","img/jpeg")]
至此,完成了在程序集中嵌入图片资源,使用该资源代码如下:
<%--前台--%> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:Image runat="server" ID="img" /> </form> </body> </html>
//后台 protected void Page_Load(object sender, EventArgs e) { string imgPath = Page.ClientScript.GetWebResourceUrl(typeof(JsLib.MyControl), "JsLib.images.1.jpg"); img.ImageUrl = imgPath; }
三、如何在程序集中嵌入css文件
接第一例,在程序集中建一个文件,命名为css,在css文件夹下建立一个css文件,命名为1.css,内容代码如下:
.txt { background-color:Red; }
接第一例第3步.
4.将1.css设置为"嵌入式资源"
5.在程序集中注册该css文件
[assembly: System.Web.UI.WebResource("JsLib.css.1.css", "application/css")]
至此,完成了在程序集中嵌入css资源,使用该资源代码如下:
<%--前台--%> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <input type="text" id="txt1" class="txt" /> </form> </body> </html>
//后台 protected void Page_Load(object sender, EventArgs e) { string cssPath = ClientScript.GetWebResourceUrl(typeof(JsLib.MyControl), "JsLib.css.1.css"); LiteralControl lc = new LiteralControl(); lc.Text = string.Format("<link href='{0}' rel='stylesheet' type='text/css' />", cssPath); Page.Header.Controls.Add(lc); }
小结:
1.设置资源文件为"嵌入式资源"
2.在assembly文件中注册该资源文件,注册时注意资源文件的mime类型
3.客户端引用资源文件时使用Page.ClientScript.GetWebResourceUrl来获取资源文件.