使用ASP.NET 2.0提供的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等外部资源的管理问题。现在只需要在solution explorer把资源文件的build action属性设为Embedded Resource。然后在assemblyinfo.cs里添加一句:
[assembly: WebResource("WebCtrl.cutecat.jpg", "image/jpg")]
    我们可以看msdn里有WebResource的参数说明:第一个是资源的名字,第二个是资源的 mime-type名。
    其实这个语句放任何cs文件里,保证放在最高级namespace外就行。

    然后在程序中调用如下:
m_Image.ImageUrl =  this.Page.GetWebResourceUrl( typeof(WebCustom), "WebCtrl.cutecat.jpg");
    GetWebResourceUrl的第一个参数是用户定义的类型(这个是用来确定assembly用的),第二个参数是资源名。

    上面的语句返回给browser的代码是:
< img  src ="WebResource.axd?a=pWebCtrl&amp;r=WebCtrl.cutecat.jpg&amp;t=632390947985312500"  style ="border-width:0px;"   />
    其中的src就是GetWebesourceUrl执行后返回的,它有3个参数(这里的&被解析成了&amp;,不过IIS也认的),第一个参数a是就是通过typeof(WebCustom)来确定的assembly的名字,第二个参数r很明显就是资源的名字了,第三个参数t是一个a所指的assembly的timestamp。这个t是为了让资源的引用能享用browser缓存的优化,因为IE对相同的url有自己的cache机制。又因为这个r同时又是用户assembly文件的timestamp,如果用户更新了代码,重新编译后t也会变化,这样也就保证了browser能获得最新的资源更新。如果我们能确定嵌入资源是确实不用再更新的,我们可以在typeof()里写一个bcl里的类型,比如typeof(string),那么他将只在freamwork升级后才会变动这个t。

    当然这个WebResource.axd是不存在的,它只是IIS中的一个ISAPI影射。

    使用示例代码如下:
#region WebResource Demo

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;

[assembly: WebResource("WebCtrl.cutecat.jpg", "image/jpg")]

namespace WebCtrl
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:WebCustom runat=server></{0}:WebCustom>")]
     public  class WebCustom : WebControl
    {
         private  string text;
         private Image m_Image;

        [Bindable( true)]
        [Category("Appearance")]
        [DefaultValue("")]
         public  string Text
        {
             get {  return text; }
             set { text = value; }
        }

         protected  override  void CreateChildControls()
        {
            m_Image =  new Image();
             this.Controls.Add(m_Image);
        }

         protected  override  void Render(HtmlTextWriter output)
        {
            m_Image.ImageUrl =  this.Page.GetWebResourceUrl( typeof(WebCustom), "WebCtrl.cutecat.jpg");
             this.RenderChildren(output);
        }
    }
}
#endregion

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
数据库连接 开发者
.NET 内存管理两种有效的资源释放方式
【10月更文挑战第15天】在.NET中,有两种有效的资源释放方式:一是使用`using`语句,适用于实现`IDisposable`接口的对象,如文件流、数据库连接等,能确保资源及时释放,避免泄漏;二是手动调用`Dispose`方法并处理异常,提供更灵活的资源管理方式,适用于复杂场景。这两种方式都能有效管理资源,提高应用性能和稳定性。
|
1月前
|
算法 Java 数据库连接
.NET 内存管理两种有效的资源释放方式
【10月更文挑战第14天】在 .NET 中,`IDisposable` 接口提供了一种标准机制来释放非托管资源,如文件句柄、数据库连接等。此类资源需手动释放以避免泄漏。实现 `IDisposable` 的类可通过 `Dispose` 方法释放资源。使用 `using` 语句可确保资源自动释放。此外,.NET 的垃圾回收器会自动回收托管对象所占内存,提高程序效率。示例代码展示了如何使用 `MyFileHandler` 类处理文件操作并释放 `FileStream` 资源。
|
3月前
|
开发框架 前端开发 .NET
究竟是什么让.NET 开发者社区拥有如此强大的力量?资源、分享还是成长的秘密?
【8月更文挑战第28天】.NET开发者社区为成员提供了丰富的资源、积极的分享氛围和广阔的成长空间,是一个充满活力的知识宝库。在这里,从前沿的开源项目到深入的技术解析应有尽有,无论你是新手还是专家,都能找到适合自己的学习与交流机会,共同推动.NET技术的发展。
41 5
|
5月前
|
存储 分布式计算 大数据
MaxCompute操作报错合集之自定义udf的函数,引用了import net.sourceforge.pinyin4j.PinyinHelper;但是上传资源后,出现报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
107 0
|
6月前
|
开发框架 搜索推荐 .NET
ASP.NET体检中心源码,实现检前、检中、检后全流程管理
健康体检系统遵循整个健康体检的实际流程,以提高工作效率、降低错检、防止漏检提高人性化服务水平为目的,在体检过程中可以高效、自动化、人性化的处理数据与提供服务。针对体检流程中工作强度在时间分配上不均匀等特点,解决了体检信息处理效率问题,在不增加体检中心人力资源投入或少投入的基础上,提升信息处理的效率,从而突破体检中心日处理体检人数的上限,为体检中心创造更大经济效益的同时,还能有效的降低体检工作者的劳动强度。
117 5
|
6月前
|
存储 开发框架 .NET
【ASP.NET】医学实验室管理(LIS)系统源码
【ASP.NET】医学实验室管理(LIS)系统源码
123 0
|
开发框架 监控 .NET
ASP.NET Dotnet LIMS实验室综合管理和质量监控系统源码
系统功能包括检测管理(合同管理、样品管理、样品收发管理、工作任务分配、检测结果登记、复核及审核、留样管理等)、报告管理(报告编制、审核、签发、打印等)、原始记录管理、仪器设备管理、物质试剂管理、文件管理、组织人员管理、标准管理、客户供应商管理、财务管理、查询统计等诸多模块为一体,组成一套完整的实验室综合管理和质量监控体系。
|
开发框架 数据可视化 前端开发
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
573 0
|
前端开发 C#
C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
|
开发框架 监控 前端开发
ASP.NET实验室信息化管理平台(LIMS)源码
实验室信息管理系统(LIMS)是实验室人(人员)、机(仪器)、料(样品、材料)、法(方法、标准、质量)、环(环境)全面资源管理的实验室信息化管理系统,是一套完整的检验综合管理和产品质量监控体系,在满足日常管理要求,保证检验分析数据的严格管理和控制。它能全面优化实验室的检验管理工作,显著提升实验室的工作效率和生产力,提高质量控制水平。
89 0