许久以前,写过一篇《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[邹健的博客]允许转载麻烦留言

邹健 2007-08-01 12:47 发表评论

文章来源:http://www.cnblogs.com/chsword/archive/2007/08/01/838870.html

转载于:https://www.cnblogs.com/wallis0922/archive/2007/08/28/872321.html

[导入]Asp.net中动态在中加入Scrpit标签相关推荐

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

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

  2. Axure中动态面板中的“推动/拉动原件”

    拉入一个矩形 改变矩形的大小.颜色.边框. 双击矩形,打上文字"菜单1",改变文字大小.颜色.样式. 选中矩形,"右击"跳出选项栏,点击转换为动态面板. 选中动 ...

  3. ASP.NET 如何动态修改 title Meta link标签

    1 修改稿title    对于修改title在页面内直接用 this.title="要修改的title"就可以了 2 修改 Meta标签   主要是用到了 HtmlMeta  H ...

  4. asp.net panel 加html,ASP.NET 页面中动态增加的控件、添加事件

    要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone! 提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常! 大家都知道,按钮的点击事件是在R ...

  5. 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )

    文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...

  6. Asp.net(C#)动态生成表格中的按钮和事件响应

    最近几天一直在用C#写Asp.net的东西,发觉Asp.net很好用,也不好用,可能自己的认识比较浅,所以还要多多学习.下面是我遇上的一个问题,要动态的生成表格的行,同时在表格中插入按钮相应事件.插入 ...

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

    今天被问到如何在ASP.NET 页面中动态创建一批控件,并且希望在后续代码中能访问到这些动态创建的控件.我用下面的例子来解释这个问题 ================================= ...

  8. ASP.NET Core 3.0中使用动态控制器路由

    原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...

  9. ASP.NET 2.0 中动态添加 GridView 模板列

      ASP.NET 2.0 中动态添加 GridView 模板列的例子 动态添加列,关键是实现 ITemplate.InstantiateIn 方法.下面是一个添加 GridView 模板列的例子. ...

最新文章

  1. java数组转换成字符串,附小技巧
  2. 解决alert在ios版微信中显示url的问题(重写alert)
  3. C#中的IntPtr类型(指针等用)
  4. 微信小程序实现时间戳转为时间格式
  5. Oracle Explain Plan,hint解释与示例
  6. python七巧板三角形_用七巧板拼出14种三角形,这才是图形认知的神器!
  7. axure iphone8元件库_Axure8最全元件库整理
  8. [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.5
  9. 关于2022年度深圳市技术攻关重大项目的申报通知
  10. Axure之中继器的使用
  11. linux给普通用户添加管理员权限,linux 赋予普通用户管理员权限
  12. 面试技巧(2) 个人面试注意事项
  13. 金属非金属如何去毛刺 机器人浮动去毛刺
  14. 如何用计算机弹出斗地主的声音,玩斗地主没声音电脑瞎出牌。我点的没有.怎么办?...
  15. 房子,婚姻,名字,这三个关键词,你怎么看?
  16. NISP一级模拟题(一、二)
  17. Jungle Roads丛林道路(最小生成树PrimKruskal算法)
  18. 计算机水平熟悉情况,计算机水平如何填
  19. MySQL多实例(一台服务器搭建多个数据库)
  20. 前端对接打印机的一些经验总结

热门文章

  1. 新手实用的电脑维护小常识
  2. 电脑技巧:这样检查电脑后终于知道为什么越用越卡
  3. 只有3%的猿能完全看懂的高端漫画
  4. c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了
  5. 树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册
  6. 原生js追加html代码,原生js实现给指定元素的后面追加内容
  7. 顺德机器人应用与维修专业收入_保定万维科技技校专业课程巡礼——计算机应用与维修...
  8. java headless_使用Chrome Headless 快速实现java版数据的抓取
  9. JavaScript 对象所有API解析【2020版】
  10. 写出整洁的高效的js代码