`
ljzforever
  • 浏览: 117159 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于用户控件中文件链接的处理

阅读更多

    最近在开发网站,大量用到了用户控件,遇到了一个棘手的问题。用户控件在网站中的路径在使用中是跟随的母页的路径。由于各个页面都可能使用同一用户控件,所以其实际路径各不相同。这对引用JS/css/图片带来了困扰。


    我原来的作法是:在所属页面统一加载JS/css,但是这好象不符合OO原则,增加了页面与用户控件间的耦合。于是想有没有什么其它的方法。


    图片引用可以通过在页面嵌入

<%=ResolveUrl(url)%>

 

 

来解决,但js/css则不能这样。因为同一页面可能会引用不同的用户控件,不同的用户控件又可能会引用同一js/css,这会导致同一js/css在最终生成的页面上被加载多次。在网上搜了搜,有种解决方法,就是在用户控件的OnPreRender事件(或其它合适事件)内通过对Page.Header对象进行判断来决定是否加载,如果没有加载,则将"<script src='url'></script>"封装到一个literal控件内,然后将些控件加载到Header中。呵呵,好是好,就是觉得太麻烦了。后来本人想来想去,发现了一个更简单的方法:Page类内有个ClientScript类,有个RegisterClientScriptBlock方法,作用是向页面注册JS代码。那我能不能把上面这调动JS的HTML代码放进去呢。事实证明是可以的:

 

Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), ResolveUrl("url"), "<script src='" + ResolveUrl("url") + "'></script>;", true);

 


不过有几点需要注意:
1.用户控件本身是没有ClientScript类的,需要引用Page.
2.在注册类型时,是Page.GetType(),而不是一般的GetType(),原因请自行思考
3.在这里key参数是本js/css的路径,而同一页面相对于js/css的相对路径是一致的,那么即使后台注册多次,这个key值也是一致的。而所有用户控件所属的Page也是一致的,所以Page.GetType()也是一致的。type与key对于同一js/css都是一致的,那么无论后台注册多少次,前台都只会注册一次。

 

但是这个方法是有缺点的:
RegisterClientScriptBlock方法会在<form>标签后注册脚本,而不是头部。这样的话如果在头部写的JS需要后面JS的支持,则会报错。解决方法是遵守一个原则:谁需要,谁调用。即:用户控件只加载用户控件需要的JS/css,页面加载页面需要的JS/css,但是如果用户控件与页面都需要同一JS/css,哎~~没办法了,这就非要加载两次了

分享到:
评论

相关推荐

    C# winform动态添加和删除用户控件.rar

    在动态添加的用户控件中,可能需要处理控件的事件。由于控件是在运行时创建的,需要使用委托和事件处理程序来连接控件的事件。例如,如果用户控件有一个点击事件,可以这样添加事件处理: ```csharp myUserControl...

    asp.net多文件上传用户控件源码

    这个用户控件旨在简化多文件上传操作,使得开发者可以在网页中快速集成,提供用户友好的文件上传体验。 ASP.NET是微软公司推出的一种用于构建动态Web应用程序的框架,它提供了丰富的服务器控件和事件处理机制,使得...

    C# 控件拖动(直线连接)

    - 要保存用户的流程图布局,可以将每个控件的位置和连接关系序列化为XML或JSON文件,便于之后读取恢复。 - 在程序启动时,解析这些文件以还原控件的位置和连接线。 6. **用户交互优化**: - 可以添加额外的逻辑...

    ntko 大文件上传控件的文档

    ntko大文件上传控件是专门用于处理大文件上传的软件组件,对于Web应用程序的开发人员来说,它提供了一种...总之,ntko大文件上传控件是开发人员在处理大文件上传场景中的得力工具,能有效提高项目的效率和用户体验。

    ADO数据库连接控件

    在传统的Windows应用程序开发中,开发者通常会使用这种控件来集成到他们的应用中,以便用户能够直接在界面上进行数据库的查询、修改、添加和删除等操作。 描述中的“用于数据库连接的控件,主要进行远程数据库访问...

    多文件上传用户控件源码

    标题中的“多文件上传用户控件源码”指的是一个用于实现网页上批量上传多个文件的组件,这个组件的源代码是公开的,可供开发者参考和使用。它基于ASP.NET技术,利用C#作为后端编程语言,同时结合前端的jQuery库和CSS...

    delphi WinSocket控件传送文件

    本篇文章将详细讲解如何利用WinSocket控件在Delphi中实现文件的在线传送。 首先,我们需要了解WinSocket控件。它是VCL(Visual Component Library)的一部分,通常命名为TClientSocket和TSocketServer。...

    ajax_C#多文件上传用户控件

    在这个“ajax_C#多文件上传用户控件”中,我们将探讨如何利用AJAX技术和C#实现异步、多文件上传的功能,提升用户体验。 首先,`FileUploadPanel.ascx`是一个用户控件(User Control)文件,它通常包含HTML、CSS和...

    Winsock控件连接示例

    在本文中,我们将深入探讨Winsock控件在单连接和多连接场景下的应用,以及如何利用它来实现基本的聊天功能。 首先,Winsock控件是Microsoft提供的一种接口,它允许程序员通过TCP/IP协议栈与网络进行交互。在Visual ...

    SharePoint WebPart 用户控件包装器

    - **保留 WebPart 特性**:即使使用了用户控件包装器,生成的 WebPart 仍然保留了自定义属性和连接等重要特性,确保了与原生 WebPart 相同的功能性和灵活性。 #### 四、安装与配置步骤 ##### 1. 下载与安装 - ...

    httpdownload文件下载控件

    该控件的主要功能是实现HTTP协议下的文件下载操作,方便开发者集成到各种应用程序中,提供用户友好的文件下载体验。荆门泽优软件有限公司是该控件的开发者,并在官方网站上提供了详细的文档、示例代码以及安装包供...

    上传大文件控件

    在IT领域,尤其是在Web开发中,"上传大文件控件"是一个重要的功能点,它允许用户上传超过常规限制的大尺寸文件。这个控件通常涉及到浏览器兼容性、分块上传、进度显示、错误处理等多个技术细节。下面将详细介绍这些...

    QT项目文件-跨类调用控件

    QT项目文件-跨类调用控件是QT编程中一个重要的概念,主要涉及的是如何在不同的C++类之间有效地通信,以便实现复杂的功能和界面交互。QT是一个强大的跨平台应用程序开发框架,它允许开发者创建丰富的图形用户界面和...

    通过Winsock控件建立的客户、服务器文件传输程序。支持多用户连

    【标题】中的知识点主要涉及了使用Winsock控件构建的客户端和服务器端文件传输程序,以及该程序对多用户连接的支持。Winsock是Windows Socket的缩写,是Microsoft Windows平台上实现TCP/IP协议栈的应用编程接口(API...

    C#2.0大文件上传控件

    当涉及到大文件上传时,由于浏览器的限制以及为了提高用户体验,通常需要编写特定的控件来处理这种需求。"C# 2.0大文件上传控件"就是这样一个解决方案,它允许用户上传大文件并同时显示上传进度,提升用户的交互体验...

    Anthem.NET中FileUpload控件Ajax方式的文件上传

    FileUpload控件是ASP.NET中用于处理文件上传的标准控件,它允许用户从本地计算机选择文件,并将其发送到服务器。在Anthem.NET中,FileUpload控件可能有一些额外的特性或配置,比如Ajax支持,以实现无刷新上传。 ...

    常用的vb用户控件关于安捷伦34401A万用表

    标题“常用的vb用户控件关于安捷伦34401A万用表”暗示我们讨论的是如何在VB应用程序中利用用户控件来操作34401A。用户控件是VB中的一种自定义组件,它可以包含多个基本控件以及自定义的属性、事件和方法,使得代码...

    使用数据绑定控件连接数据源.rar

    在.NET框架中,数据绑定控件允许开发者将用户界面(UI)组件与数据源无缝连接,从而实现动态数据显示和用户交互。本教程主要关注如何使用数据绑定控件来连接数据源,以创建更加互动和动态的应用程序。 首先,我们...

    WPF用户控件制作与使用

    在本文中,我们将深入探讨如何使用MVVM(Model-View-ViewModel)设计模式来创建和使用WPF(Windows Presentation Foundation)用户控件。WPF是.NET框架中的一个强大的UI技术,它提供了丰富的功能来构建美观且功能...

    C#自定义控件库

    4. **数据绑定**:在.NET中,数据绑定是将控件与数据源连接起来的技术。自定义控件可以支持数据绑定,使得控件的值能直接反映数据源的变更,这在MVVM(Model-View-ViewModel)架构中尤为重要。 5. **控件状态管理**...

Global site tag (gtag.js) - Google Analytics