zoukankan      html  css  js  c++  java
  • 组件开发之ASP.NET中集成资源文件的服务器端控件开发

        一个ASP.net中的控件,往往要使用到一些图片、CSS和脚本JS文件等等,如果要求用户把这些资源文件自己复制到网站目录中,往往让人感觉很麻烦很不专业。如果能够在控件中包含这些资源,能够自动引用,不单单看上去很专业而且少了一些不必要的麻烦,比如资源文件的缺失、应用路径不对等等问题。那么怎么才能做到控件自己携带这些资源文件并且在程序中引用呢?
        一、.Net1.1及以前版本中,FrameWork中没有内置的支持,所以只能自己实现:
        1.利用ASP.net支持子目录中Web.Config的特点,在运行时动态在网站的根目录下创建自己定义的控件的子目录,然后在里面生成一个web.config文件,设置好Http处理程序设置
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        
    <system.web>
             
    <httpHandlers>
                    
    <add verb="*" path="*" type="My.WebForm.DateControl.HttpHandler, My.WebForm.DateControl"/>    
            
    </httpHandlers>
        
    </system.web>
    </configuration>
    type字符串中时自己实现的HttpHandler类名,后面是所在的Dll文件名称。
        2.实现自己的HttpHandler类,用于返回资源文件,这里针对脚本和图像实现了不同的方法。
    自定义HttpHandler

    在那两个类中分别实现了读取和返回脚本和图像的数据流, 这个大家都不陌生,就不再缀述了.
        3.再Render时这样引用资源

    string path=System.String.Concat(resolvePath, "SCRIPTHANDLER.ASPX?filename=dateCtl.js");
    writer.write(
    "<img src='"+path+"'>");
    其中,resolvePath=Helper.Context.Request.ApplicationPath + 自定义的控件目录。这样由于我们对资源的应用都被子目录中的webconfig配置转换到了我们自定义的HttpHandler来处理,就实现了自包含的资源引用。
        二、。Net2.0中,这些已经用不到了(可恶的微软,沾沾自喜的许多技术都被谋杀了:)). dot Net FrameWork中已经为我们内置了一个HttpHandler,处理资源文件的引用。
        1。在控件中加入类属性WebResourceAttribute
    [assembly: WebResource("My.WebForm.ExGridView.Files.ExGridView.js""text/javascript")]
    [assembly: WebResource(
    "My.WebForm.ExGridView.Files.add.gif""image/gif")]
    [assembly: WebResource(
    "My.WebForm.ExGridView.Files.cancel.gif""image/gif")]
    [assembly: WebResource(
    "My.WebForm.ExGridView.Files.delete.gif""image/gif")]
    namespace My.WebForm.ExGridView
    {
        [ToolboxData(
    "<{0}:ExGridView runat=server></{0}:ExGridView>")]
        [ParseChildren(
    true)]
        
    public class ExGridView : GridView,IPostBackDataHandler

    }

       这里要注意的是My.WebForm.ExGridView.Files并不是实际的目录名字,My.WebForm.ExGridView是控件的namespace,只有Files是实际的想对于控件项目的根目录的子目录名称,必须这样全限定名引用,否则找不到资源!另外别忘了把这些资源文件的编译方式生成操作改成“嵌入得资源”
       2。在需要引用的地方使用CLientScriptManager.GetWebResourceUrl获得资源的引用:

    btn.CancelImageUrl =  Page.ClientScript.GetWebResourceUrl(this.GetType(),"My.WebForm.ExGridView.Files.cancel.gif");
    同样要注意使用全限定名,而且是大小写区分的。好了,在asp.net2.0中就这么简单,从现在开始把资源文件打包到控件中吧。
  • 相关阅读:
    我对“错排问题”的理解
    洛谷P1144 最短路计数 题解 无权图的最短路计数(广搜)
    洛谷P1714 切蛋糕 题解 单调队列
    洛谷P6040 「ACOI2020」课后期末考试滑溜滑溜补习班 题解 单调队列优化DP
    POJ2559 Largest Rectangle in a Histogram 题解 单调队列/单调栈 (直方图的最大矩形面积)
    洛谷P2947 向右看齐Look Up 题解 单调栈/单调队列
    洛谷P1725 琪露诺 题解 单调队列优化DP入门题
    洛谷P1886 滑动窗口 题解 单调队列
    洛谷P2952 牛线Cow Line 题解 双端队列deque的使用
    多线程交互,访问数据,如果访问到了就不访问了,怎么 避免重读?
  • 原文地址:https://www.cnblogs.com/dajianshi/p/383626.html
Copyright © 2011-2022 走看看