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

简介: 许久以前,写过一篇《asp.net页中动态加入样式表文件》,后来发现在使用时如果每页都写这么个函数真是很麻烦,于是自己写了一个Page的派生。将这个函数加了进去。      /**////     /// 作者 邹健    /// 日期 20070202    /// 重载的Page类。
许久以前,写过一篇 《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 Default Class Default
    
Inherits Page
C#应该类似Default : Page
现在只要改成
Partial   Class Default Class Default
    
Inherits ChPage
C#相应为 Default:ChPage
就可以了

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

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


目录
相关文章
|
开发框架 前端开发 安全
ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础
ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础
177 0
|
开发框架 前端开发 .NET
ASP.NET Core MVC 从入门到精通之Html辅助标签(一)
ASP.NET Core MVC 从入门到精通之Html辅助标签(一)
183 0
|
移动开发 开发框架 网络协议
WPF+ASP.NET SignalR实现动态折线图
WPF+ASP.NET SignalR实现动态折线图
298 0
|
开发框架 前端开发 .NET
ASP.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图
ASP.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图
219 0
ASP.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图
|
开发框架 .NET C#
ASP.NET Core 返回文件、用户 下载文件,从网站下载文件,动态下载文件
ASP.NET Core 返回文件、用户 下载文件,从网站下载文件,动态下载文件
784 0
|
前端开发 .NET 数据库
asp.net mvc razor布局页中a标签的href的跳转问题
笔者做了一个文件上传系统,文件上传后,保存在wwwroot目录的file文件夹中,并把该文件的路径保存到数据库中, 如这样的一个路径保存在数据库:   file/b775f487-0127-41e0-9df8-2a5f1624cd87.
1793 0