在 ASP.NET 2.0 中的 Web 资源使用

文章翻译 文章翻译
文章编号: 910442 - 查看本文应用于的产品
ASP.NET 支持语音列

在 ASP.NET 2.0 中的 Web 资源使用

要自定义此列设置为您的需要,我们想要邀请您提交您的想法有关您和您想要查看的问题感兴趣的主题在将来解决知识文库文章和 Support Voice 专栏。您可以提交您的意见和反馈使用 诚征意见 表单。也是一个链接到该窗体,在此列的底部。
展开全部 | 关闭全部

本文内容

简介

您好 !我的名字是 Praveen Yerneni 和我的技术负责人的工作与在 Microsoft ASP.NET 支持组。在本月的专栏中,我将讨论 Web 资源和如何实现它们在您应用程序。

如果您是开发人员广泛地处理 COM控件,您可能会发现这篇文章有用解决一些关键开发控件时可能遇到的问题。以前,在 MicrosoftASP.NET 1.1 版中,如果您想要将静态文件,例如.html 文件部署.css文件、 图像文件和脚本文件,通过使用 COM 控件,您必须创建安装程序和包这些文件与 COM 一起控制。尽管这起作用,它在部署该控件的过程中出现许多问题。对于示例中,您可能存在版本冲突,并确保与问题(如图像的文件已部署到相同的位置,或使用已损坏或已删除的静态文件,从而导致该控件失败。

WebMicrosoft ASP.NET 2.0 中的资源允许,从而解决了这些问题开发人员将这些资源嵌入在程序集中作为.resources。若要访问这些方法静态资源,您可以只调用一种方法在控件的代码。

Web 资源的工作方式

Web 资源依赖于一个名为的特殊处理程序WebResource.axd,专门用来检索程序集资源提供服务它们的 Web 浏览器。WebResource.axd 的处理程序类型为AssemblyResourceLoader

当请求到达从客户端WebResource.axd,该处理程序查找所请求的对象的查询字符串方法中的 Web 资源标识符。根据值的 Web 资源标识符,然后,处理程序尝试加载包含该资源的程序集。如果此操作是成功的该处理程序然后将查找程序集属性并从程序集加载的资源流。最后,该处理程序将获取从资源数据流,并将其发送到客户端一起使用在程序集属性中指定的内容类型。

对于 URLWebResource.axd 看起来如下所示:
WebResource.axd?d=SbXSD3uTnhYsK4gMD8fL84_mHPC5jJ7lfdnr1_WtsftZiUOZ6IXYG8QCXW86UizF0&t=632768953157700078
此 URL 的格式为 WebResource.axd?d=加密标识符& t =时间戳值.""d"代表请求的 Web 资源。"T"时的时间戳请求的程序集,可以帮助确定是否发生了任何对该资源的更改。

研究工作之余到代码

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

对 Web 资源的 COM 控件

有关创建和嵌入 Web 资源,我已经开发了一个 COM控件 (SimpleControl)。它具有以下嵌入的资源:
  • 两个图像名为 smallFail.gif 的文件,变换图像效果,在使用这些图像文件 smallSuccess.gif。控件,并且所使用的控件代码中。
  • 一个名为 Help.htm 的 HTML 文件。此文件没有包含文本长,只是为了演示。
  • 名为 MyScript.js 的一个 JavaScript 文件。此文件包含一些 JavaScript 代码,它还演示替换功能若要获取对在同一个另一个嵌入的资源的引用程序集。
  • 名为 MyStyleSheet.css 的一个.css 文件。此样式表然后使用直接从 ASP.NET Web 应用程序中。
在本文中,我将讨论所需的部件Web 资源。
嵌入 Web 资源
首先,您必须确保所有静态文件是添加到 Microsoft Visual Studio 2005年中的项目是 Web 控件库嵌入的资源。若要嵌入这些资源,您所要做的就是添加这些文件复制到 Visual Studio,然后因此修改这些文件的属性生成操作已设置为 嵌入资源.

完成此操作后,您还必须使确保如下所示有了这些资源引用的 AssemblyInfo.cs 文件中的web 资源的程序集属性。
[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)]

Web 资源的程序集特性具有三个参数,如下所示:
  • Web 资源: 在程序集中嵌入资源的名称
  • ContentType: MIME 的资源的文件类型
  • PerformSubstitution: 一个布尔值,确定是否其他 Web 资源的 Url引用该资源中,被分析并被替换为完整路径资源的
获取 Web 资源
获取 Web 资源,我使用GetWebResourceUrl方法,它是一种通常用于管理客户端脚本的ClientScriptManager类的方法。此方法返回的服务器端资源的 URL 引用嵌入到程序集中。GetWebResourceUrl方法接受以下两个参数:
  • 键入: 服务器端资源的类型
  • 资源名称: 服务器端资源的名称
若要使用此方法,首先您必须创建ClientScriptManager类的一个实例并获取类的类型,如下所示。
ClientScriptManager cs = Page.ClientScript;
            Type rsType = this.GetType();

如果您有此类的一个实例,然后需要调用此成员,方法传递相应的参数如下所示,在其中创建超链接按钮,并设置NavigateURL方法,使其指向嵌入 HTML 资源。
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);

也在同一代码中列出上面,我已创建一个图像按钮并单击 ImageUrl属性从另一个嵌入的.gif 图像中获取其值资源。
使用替换功能
"嵌入 Web 资源"部分中所述,使用 Web 资源的另一个非常有用的功能是web 资源属性中的PerformSubstitution属性上面。此功能可以真正在另一个嵌入获取 Web 资源资源。如果启用此属性,则web 资源处理程序将解析嵌入的资源,并替换该语法具有前服务的实际资源的web 资源的程序集特性页。

在上面的代码中,您将注意到该超链接控件有一个名为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 控件。请注意我使用的web 资源的方法来引用脚本中的另一个嵌入的资源文件。

此外,要确保此 JavaScript 文件在中注册页上,我使用ClientScriptManager类的RegisterClientScriptInclude方法,如下所示。
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 应用程序中使用。若要访问此样式表,您必须添加HtmlControl在 HTML 页上,然后将服务器(如图所示为目前属性设置中下一个链接。
<link rel="Stylesheet"  id="lnkStyle" runat="server"  />
之后,您可以以编程方式设置此控件,使其指向web 资源程序集属性在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);
     }

运行代码时,您将看到如下所示的控件后面:
收起这个图片展开这个图片
 小故障
并在鼠标移过该控件将如下所示:
收起这个图片展开这个图片
 小成功
当您单击此链接时,它将指导您在帮助页中,其中嵌入在 COM 控件程序集文件中。

结论

Web 资源是在 ASP.NET 2.0 中的有用新功能。您可以使用为您的优势,如果明智地使用此功能。很多的缓存技术已使用,以确保 Web 资源不会影响性能该应用程序。

在 ASP.NET 2.0 中,WebResource.axd 是由内部使用若要使 Microsoft.NET Framework 来检索嵌入的资源。例如,.NET Framework 使用 WebResource.axd WebUIValidation.js 脚本中检索用于验证控件和菜单控件检索的 Menu.js 脚本文件的文件。

参考

有关详细信息,请访问下面的 Microsoft 网站:
ClientScriptManager.GetWebResourceUrl 方法
http://msdn2.microsoft.com/en-us/library(d=robot) /system.web.ui.clientscriptmanager.getwebresourceurl.aspx

WebResourceAttribute 类
http://msdn2.microsoft.com/en-us/library(d=robot) /system.web.ui.webresourceattribute.aspx

链接与嵌入的资源
http://msdn2.microsoft.com/en-us/library/ht9h2dk8.aspx
与以往一样,随意提交所需的主题的意见在今后的专栏中或在知识文库中使用处理 诚征意见 表单。

属性

文章编号: 910442 - 最后修改: 2013年4月30日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft ASP.NET 2.0
关键字:?
kbhowto kbasp kbmt KB910442 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 910442
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com