使用 ASP.NET 2.0 中的 Web 资源

Web 资源的工作方式

web 资源依赖于一个名为 WebResource.axd,设计用于检索程序集资源,它们用于在 Web 浏览器的特殊处理程序。对于 WebResource.axd 处理程序类型是 AssemblyResourceLoader

 

当请求来自客户端进行 WebResource.axd 时,该处理程序将查找 请求 对象的 查询字符串 方法中的 Web 资源标识符。基于 Web 资源标识符的值,该处理程序然后尝试加载包含此资源的程序集。是否成功此操作处理程序将然后查找程序集属性并从该程序集加载资源流。最后,该处理程序将获取从资源流数据并将它发送到客户端一起与您在程序集属性中指定的内容类型。

类似于下面的 URL WebResource.axd 外观:

WebResource.axd?d=SbXSD3uTnhYsK4gMD8fL84_mHPC5jJ7lfdnr1_WtsftZiUOZ6IXYG8QCXW86UizF0&t=632768953157700078

此 URL 的格式为 WebResource.axd?d= encrypted identifier & t =time stamp value。"d"代表请求的 Web 资源。"t"为程序请求集可以帮助确定是否已对该资源所做的任何更改的时间戳。

delving 到代码

在我的示例,我已经开发了 ASP.NET Web 应用程序来演示这一新功能所使用的 COM 控件。

为 Web 资源的 COM 控件

我已经创建,并嵌入 Web 资源的开发一个 COM 控件 (SimpleControl)。它具有以下嵌入的资源:

  • 两个图像 smallFail.gif 和 smallSuccess.gif 命名的文件。这些图像文件用于在控件中的滚动效果和控件代码中使用。
  • 名为 Help.htm 的 HTML 文件。此文件不包含多文本,并且只是为了演示。
  • 名为 MyScript.js 一个 JavaScript 文件。此文件包含一些 JavaScript 代码,它还演示了替换功能来获取对同一程序集中的另一个嵌入的资源的引用。
  • 名为 MyStyleSheet.css 一个.css 文件。直接从 ASP.NET Web 应用程序,然后将消耗此样式表。

此本文中,我将讨论所需的 Web 资源部分。

嵌入 Web 资源

第一次,您必须确保添加到 Web 控件库项目中,Microsoft Visual Studio 2005 中的所有静态文件是嵌入的资源。若要嵌入这些资源,所有您需要做的只是将这些文件添加到 Visual Studio,然后修改这些文件的属性,以便生成操作设置为 嵌入的资源

 

完成此操作后,您还可以确保这些资源已被引用的 WebResource 程序集属性 AssemblyInfo.cs 文件中,如下所示

[assembly: WebResource("SimpleControl.Help.htm", "text/html")]
[assembly: WebResource("SimpleControl.MyStyleSheet.css", "text/css")]
[assembly: WebResource("SimpleControl.smallFail.gif", "image/gif")]
[assembly: WebResource("SimpleControl.smallSuccess.gif", "image/gif")]
[assembly: WebResource("SimpleControl.MyScript.js", "text/javascript", PerformSubstitution = true)]

 

 

WebResource 程序集属性具有三个参数,如下所示:

  • web 资源: 在程序集中嵌入的资源的名称
  • ContentType: 资源的 MIME 文件类型
  • PerformSubstitution: 确定是否在此资源中引用其他 Web 资源 url 是分析,并替换该资源的完整路径的布尔值(当此值为True的文件里,所有的WebResource都会解析。如background-image: url(<%=WebResource("SimpleControl.smallSuccess.gif")%>)”)
获取 Web 资源

获取 Web 资源,已使用 GetWebResourceUrl 方法通常用于管理客户端脚本的 ClientScriptManager 类的一个方法。 此方法返回到程序集中嵌入的服务器端资源的 URL 引用。GetWebResourceUrl 方法接受以下两个参数:

  • 类型: 服务器端资源的类型
  • 资源名称: 服务器端资源的名称

To use this method, first you have to create an instance of the ClientScriptManager class and get the type of the class as shown below.

ClientScriptManager cs = Page.ClientScript;
Type rsType = this.GetType();

 

 

When you have an instance of this class, you then have to call this method and pass the appropriate parameters as shown below, where I create a HyperLink button, and set the NavigateURL method to point to an embedded HTML resource.

HyperLink hlHelpFile = new HyperLink();
hlHelpFile.NavigateUrl = cs.GetWebResourceUrl(rsType, "SimpleControl.Help.htm");
hlHelpFile.Attributes.Add("onmouseover", "ChangeImage('image1','Red')");
hlHelpFile.Attributes.Add("onmouseout", "RollbackImage('image1','Green')");

this.Controls.Add(hlHelpFile);

 

Image imgTest = new Image();
imgTest.ImageUrl = cs.GetWebResourceUrl(rsType, "SimpleControl.smallFail.gif");
imgTest.ID = "image1";
hlHelpFile.Controls.Add(imgTest);

 

Also in the same code listing above, I have created an Image button and the ImageUrl attribute is getting its value from another embedded .gif image resource.

使用替换功能

使用 Web 资源的另一个有用的功能是 PerformSubstitutionWebResource 属性的属性,如上面的"嵌入 Web 资源"一节中所示。此功能允许您实际获得另一个嵌入的资源中的 Web 资源。如果启用此属性,则 WebResource 处理程序将分析嵌入的资源,并使用实际资源替换 WebResource 程序集属性的语法之前为页提供服务。

 

在上面的代码中,您会注意到 HyperLink 控件有一个名为 ChangeImage 的客户端的事件。此 ChangeImage 函数位于脚本文件中。下面是此脚本

function ChangeImage(imgControl,varcolor){
document.getElementById(imgControl).src = '<%= WebResource("SimpleControl.smallSuccess.gif")%>';
document.getElementById('Label1').style.color = varcolor;
}

 

function RollbackImage(imgControl, varcolor){
document.getElementById(imgControl).src = '<%= WebResource("SimpleControl.smallFail.gif")%>';
document.getElementById('Label1').style.color = varcolor;
}

被命名为 MyScript.js 此脚本文件也是在同一 COM 控件中嵌入的资源。并请注意我使用 WebResource 方法来引用在脚本文件中的另一个嵌入资源。

 

此外,以确保在页中注册此 JavaScript 文件,使用 RegisterClientScriptIncludeClientScriptManager 类的方法,如下所示

cs.RegisterClientScriptInclude("MyScript", cs.GetWebResourceUrl(rsType, "SimpleControl.MyScript.js"));
使用该控件在 ASP.NET 中

一旦您已成功生成 COM 控件,您需要使用此控件在客户端 ASP.NET 项目中。要这样做只是必须将控件添加到工具箱中在 ASP.NET 中。然后您可以将控件添加到设计器中的任何 Web 窗体。

 

当将控件添加到工具箱中时,该控件注册为您和您看一下 HTML 语法时,添加下面的代码

<cc1:MSButton ID="MSButton1" runat="server" strText="Problems?"></cc1:MSButton>

在我的 COM 控件中我还嵌入了我将在我的 ASP.NET 应用程序中使用一个样式表文件。若要进行此样式表您必须在 HTML 页中添加链接 HtmlControl 并将 runat 属性设置为 服务器,如下所示

<link rel="Stylesheet"  id="lnkStyle" runat="server"  />

之后,您可以以编程方式设置此控件使其指向 WebResource 程序集属性在 Page_Load 事件中,如下所示的 Href

属性

protected void Page_Load(object sender, EventArgs e)
{
//Get the name of the Web Resource.
String rsname = "SimpleControl.MyStyleSheet.css";

//Get the type of the class.
Type rstype = typeof(SimpleControl.MSButton);

 

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
lnkStyle.Href = cs.GetWebResourceUrl(rstype, rsname);
}

 

运行该代码时, 您将看到外观类似于以下控件:

 收起这个图片  展开这个图片
small fail

然后,在鼠标移过该控件将如下所示:

 收起这个图片  展开这个图片
small success

当您单击此链接时,它会将您带到在 COM 控件程序集文件中嵌入该帮助页。

结束时

web 资源是一个非常有用的新功能,在 ASP.NET 2.0 中。如果您明智地使用它,您可以利用使用此功能。使用了许多缓存技术,以确保 Web 资源不会影响应用程序的性能。

 

在 ASP.NET 2.0 WebResource.axd 由在内部使用 Microsoft.net 框架检索嵌入的资源。例如对于.net 框架使用 WebResource.axd 检索 WebUIValidation.js 脚本文件将用于 验证 控件,并检索 Menu.js 脚本文件的 菜单 控件。

转载于:https://www.cnblogs.com/bndy/archive/2010/05/05/1727991.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值