大家一定都知道了ASP.NET2.0提供了新的WebResource.axd特性,这个特性允许页面和控件开发者引用程序集里面的嵌入资源,这样的话,原来在需要和页面或者控件一起发布的图片、Javascript和css等资源文件就不需要单独发布了。这就大大方便了部署的工作。

 

但是,如何使用这一特性呢?这还是需要一些技巧的。

 

首先,我们需要了解什么是嵌入资源。在我们向项目中添加某个文件(可以是图片、Javascript、CSS甚至是Html)之后,如果我们在属性窗口中将这个文件的“生成操作”属性设置为“嵌入的资源”,那么这个文件就叫做嵌入资源。VS05在编译项目时,就会把这个文件的内容作为资源嵌入到程序集里面。

 

image

 

其次,我们需要通知ASP.NET有这个资源可以使用。通过在代码中某个地方声明一个特性可以做到这一点,如以下代码所示:

 

[assembly: WebResource("TestWeb.images.ServiceLayerSketch.gif", "image/gif")]

 

在这段代码中,TestWeb是程序集的名称,而images是文件所在的子目录路径,ServiceLayerSketch.gif是文件名称。而第二个参数是指资源的MIME类型。

 

最后,我们就可以通过声明式和编写代码式这两种方法来使用它了。

 

在页面中,我们可以使用ASP.NET提供的声明式语法,如下所示:

 

<img src='<%=WebResource("TestWeb.images.ServiceLayerSketch.gif")%>'>

 

或者可以在页面代码中使用以下方式:

 

string url = Page.ClientScript.GetWebResourceUrl(typeof(TestPage), "TestWeb.images.ServiceLayerSketch.gif");

Image1.ImageUrl = url;

 

使用了以上方法,我们可以在最后生成的页面中看到类似下面的链接:

 

/WebResource.axd?d=PhPk80h_UWEcbheb-NHNP5WshV_47UOpWqAOl1_li
UFfN4cNofL74cFlQ1fvpFSf0&t=632573240669964903

 

如果希望添加嵌入的javascript和css资源,可以在Init事件处理程序中使用以下代码:

 

protected override void OnInit(EventArgs e)
      {
        base.OnInit(e);
        this.Page.ClientScript.RegisterClientScriptInclude(
           this.GetType(), "Test",
           Page.ClientScript.GetWebResourceUrl(typeof(TestPage),
           "TestWeb.MyResources.Test.js"));

        string csslink = "<link href='" +
           Page.ClientScript.GetWebResourceUrl(typeof(TestPage),
            "TestWeb.MyResources.Test.css")
           + "' rel='stylesheet' type='text/css' />";
        LiteralControl include = new LiteralControl(csslink);
        this.Page.Header.Controls.Add(include);
      }

 

这下,页面中要用到的资源就可以不用单独发布了。非常COOL的一个特性。