Asp.net中动态在中加入Scrpit标签

许久以前,写过一篇《asp.net页中动态加入样式表文件》,后来发现在使用时如果每页都写这么个函数真是很麻烦,于是自己写了一个Page的派生。将这个函数加了进去。

      /**//// <summary>
    /// 作者 邹健
    /// 日期 20070202
    /// 重载的Page类。
    /// </summary>
    public class ChPage : Page {
        /**//// <summary>
        /// 构造函数。
        /// </summary>
        public ChPage() { }
        /**//// <summary>
        /// Render函数。
        /// </summary>
        /// <param name="writer">HtmlTextWriter。</param>
        protected override void Render(HtmlTextWriter writer) {
            if (writer is System.Web.UI.Html32TextWriter) {
                writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
            }
            else {
                writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
            }
            base.Render(writer);
        }
        /**//// <summary>
        /// 设置Html标签内,的Link标签,如Css
        /// </summary>
        /// <param name="cssfile">Css文件。</param>
        protected void SetHtmlLink(string cssfile) {
            HtmlLink myHtmlLink = new HtmlLink();
            myHtmlLink.Href = cssfile;
            myHtmlLink.Attributes.Add("rel", "stylesheet");
            myHtmlLink.Attributes.Add("type", "text/css");
            Page.Header.Controls.Add(myHtmlLink);
        }
        /**//// <summary>
        /// 该函数可获得web.config中的字符串。
        /// </summary>
        /// <param name="Str">指定项的键值。</param>
        /// <returns>返回键值所指的值。</returns>
        protected string GetString(string Str) {
            return System.Configuration.ConfigurationManager.AppSettings[Str];
        }
    }

但是后来发现在使用asp.net编程时,如果应用模板页的话,不止是css文件不容易后往里添,javascript文件也是如此,虽然说在模板页的<head />中建一个contentplaceholder也算可以,但那种方法毕竟不太雅,有失风范。于是就想按这种添加<link />标签的方法来泡制<script />
但发现在System.Web.UI.HtmlControls中有HtmlLink来表现<link />但却没有表现<Script />标签的类。
没办法了,因为懒所以只能自己写一个了,代码不长,如下。

namespace Chsword.Class {
    /// <summary>
    /// 可以生成script标签
    /// </summary>
    [ControlBuilder(typeof(HtmlEmptyTagControlBuilder)), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
    public class HtmlScript : HtmlControl {
        // Methods
        public HtmlScript()
            : base("script") {
        }
        protected override void Render(HtmlTextWriter writer) {
            writer.WriteBeginTag(this.TagName);
            this.RenderAttributes(writer);
            writer.Write(">");
            writer.WriteEndTag(TagName);
        }
        protected override void RenderAttributes(HtmlTextWriter writer) {
            if (!string.IsNullOrEmpty(this.Src)) {
                base.Attributes["src"] = base.ResolveClientUrl(this.Src);
            }
            base.Attributes["type"] = "text/javascript";
            base.RenderAttributes(writer);
        }
        /// <summary>
        /// 脚本的URL
        /// </summary>
        [UrlProperty]
        [DefaultValue("")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public virtual string Src {
            get {
                string text = base.Attributes["src"];
                if (text == null) {
                    return string.Empty;
                }
                return text;
            }
            set {
                base.Attributes["src"] = MapStringAttributeToString(value);
            }
        }
        string MapStringAttributeToString(string s) {
            if ((s != null) && (s.Length == 0)) {
                return null;
            }
            return s;
        }
    }
}

随后我又在原来重 写的ChPage类中添加了一个函数

        /// <summary>
        /// 设置script现在只能是type=text/javsscript的
        /// </summary>
        /// <param name="src">脚本地址</param>
        protected void SetHtmlScript(string src) {
            HtmlScript myHtmlScript = new HtmlScript();
            myHtmlScript.Src = src;
            Page.Header.Controls.Add(myHtmlScript);
        }

使用方法

原来的页面脚本是这样的
vb.net

Partial Class DefaultClass Default
    Inherits Page

C#应该类似Default : Page
现在只要改成

Partial Class DefaultClass Default
    Inherits ChPage

C#相应为 Default:ChPage
就可以了

使用时只要在载入前的某个事件,比如Init或Load写 SetHtmlScript("/Javascript/MicrosoftAjax.js")
这样就OK了
 
直接再看看生成的HTML,吼吼,已经有你添加的<script src=""/Javascript/MicrosoftAjax.js" type="text/javascript"></script>了

本如果文章中有不足的地方请大家要提出啊

文章来自chsword[邹健的博客]允许转载麻烦留言

时间: 2024-10-23 00:12:20

Asp.net中动态在中加入Scrpit标签的相关文章

ASP实例:动态网页中常用的6个ASP程序

程序|动态|网页  1. 下面的代码演示了如何在服务端获取来自客户端浏览器中某一个图片的x,y坐标,注意input控件的类型是image类型. <form><Input Name="ImageMap" Type="Image" Src="http://www.webjx.com/htmldata/2007-06-14/ImageMap.jpg" Alt="Click Anywhere"></for

ASP设计动态页中服务器端的处理

动态|服务器|设计|服务器     就服务器端处理而言,ASP是产生动态Web网页的一种相对较新的技术.动态页意味着什么呢?先暂时不考虑客户端相关功能上的进展,也不讨论客户端脚本.Java Applet.动态HTML或ActiveX控件等内容.这里的动态页是专指服务器响应客户端请求产生的页面,并且根据情况每次产生的页面可能是不同的. 举个简单的例子,创建一个只包含当前日期和时间的页面.每次请求该页面时将显示一个不同的值,因为日期和时间取决于服务器的时钟,或取决于提供日期和时间的一个资源(例如一个

动态网页中常用的6个ASP程序

 1. 下面的代码演示了如何在服务端获取来自客户端浏览器中某一个图片的x,y坐标,注意input控件的类型是image类型. <form><Input Name="ImageMap" Type="Image" Src="http://edu.cnzz.cn/NewsInfo/ImageMap.jpg" Alt="Click Anywhere"></form> <%ImageMap.x

asp.net中动态变更CSS

asp.net|css|动态 在asp.net中,有的时候要动态变换CSS,比如有的时候做个性化页面,可以这样做<head><link id="MyStyleSheet" rel="stylesheet" type="text/css" runat="server" /></head>之后,在要更换CSS的页面中,使用如下代码Sub Page_Load(Sender As Object, E

在ASP.NET中动态生成图形(转)

asp.net|动态|图形 在ASP.NET中动态生成图形 .NET有一个很灵巧的特性,就是可以编写代码生成动态图形,然后将生成的图形保存在磁盘上或者直接将其发送到客户端的浏览器. 原理 用.NET生成图形的功能封装在System.Drawing名称空间中,它支持多种图形文件格式,包括:JPEG.GIF.PNG.TIFF.BMP.PhotoCD.FlashPIX.WMF.EMF和EXIF. 创建这些图形的通用机制是构造一个BitMap(位图)对象,它为要创建的图形提供了内存空间.然后,就可以调用

在ASP.NET中动态加载内容(用户控件和模板)

asp.net|动态|加载|控件|模板 在ASP.NET中动态加载内容(用户控件和模板)要点:1. 使用Page.ParseControl2. 使用base.LoadControl第一部分:加载模板 下面是一个模板"<table width=100%><tr><td width=100% colspan=2 runat=server id=ContainerTop></td></tr><tr><td width=30%

asp.net 2.0中TREEVIEW中动态增加结点

asp.net|treeview|动态 在asp.net 2.0中,要动态从数据库中取出内容,动态增加结点,其实不难,比如以SQL SERVER 2000的PUBS数据库为例子,要以树型列表方式,取出作者,做为根结点,然后取出每位作者写过什么书,作为子结点,可以这样 <%@ Page Language="C#"%><%@ Import Namespace="System.Data"%><%@ Import Namespace="

在ASP.NET页面中动态添加控件

今天被问到如何在ASP.NET 页面中动态创建一批控件,并且希望在后续代码 中能访问到这些动态创建的控件.我用下面的例子来解释这个问题 页面文件: <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title></title> </head> <body> <form id="form1&quo

asp.net中动态生成word文档,怎么给导出的word中标题栏的加个背景颜色。

问题描述 asp.net中动态生成word文档,怎么给导出的word中标题栏的加个背景颜色. asp.net中动态生成word文档,怎么给 导出 的word中标题栏的加个背景颜色.