经常用到的Banner服务器控件的开发

简介:
  无论是论坛,还是博客就连普通的个人网页就离不开Banner,Banner主要就是图片或Flash。以前经常用到都没有把他封装成一个服务器控件,今天有点空闲所以就把它封装了。

  封装一个控件,首先当然要知道呈现的HTML代码了,其中Banner要判断是否为Flash或是图片,如果是Flash时我们还应该加入他所特有的一些属性,这个控件继承自System.Web.UI.WebControls.WebControl类,重写RenderContent方法实现,其他的一些说明在代码中有说明,这里就不多说了。下面我们来看看代码:

  1 None.gif using  System;
  2 None.gif using  System.IO;
  3 None.gif using  System.Text;
  4 None.gif using  System.Web.UI;
  5 None.gif using  System.ComponentModel;
  6 None.gif using  System.Web.UI.WebControls;
  7 None.gif
  8 None.gif namespace  NExplus.Controls
  9 ExpandedBlockStart.gif {
 10ExpandedSubBlockStart.gif    /// <summary>
 11InBlock.gif    /// 横幅广告控件。
 12ExpandedSubBlockEnd.gif    /// </summary>

 13InBlock.gif    public class Banner:WebControl
 14ExpandedSubBlockStart.gif    {
 15ExpandedSubBlockStart.gif        /// <summary>
 16InBlock.gif        /// 初始化<see cref="Banner"/>类。
 17ExpandedSubBlockEnd.gif        /// </summary>

 18ExpandedSubBlockStart.gif        public Banner() { }
 19ExpandedSubBlockStart.gif        /// <summary>
 20InBlock.gif        /// 获取或设置图片或Flash的路径。
 21ExpandedSubBlockEnd.gif        /// </summary>

 22InBlock.gif        [DefaultValue(""),
 23InBlock.gif        MergableProperty(false),
 24InBlock.gif        Description("The path of the banner!")]
 25ExpandedSubBlockStart.gif        public string Path {
 26ExpandedSubBlockStart.gif            get {
 27InBlock.gif                object obj = this.ViewState["BannerPath"];
 28InBlock.gif                if (obj != null)
 29InBlock.gif                    return (String)obj;
 30InBlock.gif                return null;
 31ExpandedSubBlockEnd.gif            }

 32ExpandedSubBlockStart.gif            set {
 33InBlock.gif                this.ViewState["BannerPath"= value;
 34ExpandedSubBlockEnd.gif            }

 35ExpandedSubBlockEnd.gif        }

 36ExpandedSubBlockStart.gif        /// <summary>
 37InBlock.gif        /// 获取或设置Flash的品质,如果是图片这将失效。
 38ExpandedSubBlockEnd.gif        /// </summary>

 39InBlock.gif        [DefaultValue("high"), MergableProperty(false)]
 40InBlock.gif        public string FlashQuality
 41ExpandedSubBlockStart.gif        {
 42InBlock.gif            get
 43ExpandedSubBlockStart.gif            {
 44InBlock.gif                object obj = this.ViewState["FlashQuality"];
 45InBlock.gif                if (obj != null)
 46InBlock.gif                    return Helper.IsNullOrEmpty((String)obj) ? "high" : (String)obj;
 47InBlock.gif                return "high";
 48ExpandedSubBlockEnd.gif            }

 49InBlock.gif            set
 50ExpandedSubBlockStart.gif            {
 51InBlock.gif                this.ViewState["FlashQuality"= value;
 52ExpandedSubBlockEnd.gif            }

 53ExpandedSubBlockEnd.gif        }

 54ExpandedSubBlockStart.gif        /// <summary>
 55InBlock.gif        /// 获取或设置是否为Flash,默认为<c>false</c>
 56ExpandedSubBlockEnd.gif        /// </summary>

 57InBlock.gif        [DefaultValue(false),
 58InBlock.gif         MergableProperty(false)]
 59ExpandedSubBlockStart.gif        public bool IsFlash {
 60ExpandedSubBlockStart.gif            get {
 61InBlock.gif                object obj = this.ViewState["IsFlash"];
 62InBlock.gif                if (obj != null)
 63InBlock.gif                    return (bool)obj;
 64InBlock.gif                return false;
 65ExpandedSubBlockEnd.gif            }

 66ExpandedSubBlockStart.gif            set {
 67InBlock.gif                this.ViewState["IsFlash"= value;
 68ExpandedSubBlockEnd.gif            }

 69ExpandedSubBlockEnd.gif        }

 70ExpandedSubBlockStart.gif        /// <summary>
 71InBlock.gif        /// 获取或设置是否为透明广告。
 72ExpandedSubBlockEnd.gif        /// </summary>

 73InBlock.gif        [DefaultValue(false),
 74InBlock.gif         MergableProperty(false)]
 75InBlock.gif        public bool IsFlashTransparent
 76ExpandedSubBlockStart.gif        {
 77InBlock.gif            get
 78ExpandedSubBlockStart.gif            {
 79InBlock.gif                object obj = this.ViewState["IsFlashTransparent"];
 80InBlock.gif                if (obj != null)
 81InBlock.gif                    return (bool)obj;
 82InBlock.gif                return false;
 83ExpandedSubBlockEnd.gif            }

 84InBlock.gif            set
 85ExpandedSubBlockStart.gif            {
 86InBlock.gif                this.ViewState["IsFlashTransparent"= value;
 87ExpandedSubBlockEnd.gif            }

 88ExpandedSubBlockEnd.gif        }

 89ExpandedSubBlockStart.gif        /// <summary>
 90InBlock.gif        /// 重写并呈现控件。
 91InBlock.gif        /// </summary>
 92ExpandedSubBlockEnd.gif        /// <param name="writer"><see cref="HtmlTextWriter"/>对象。</param>

 93InBlock.gif        protected override void RenderContents(HtmlTextWriter writer)
 94ExpandedSubBlockStart.gif        {
 95InBlock.gif            if (this.IsFlash && !Helper.IsNullOrEmpty(this.Path))
 96ExpandedSubBlockStart.gif            {
 97InBlock.gif                writer.Write("<object  classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0\" width=\"{0}\" height=\"{1}\" id=\"movie\" align=\"\">{2}", this.Width == Unit.Empty ? 480 : this.Width, this.Height==Unit.Empty?60:this.Height, Environment.NewLine);
 98ExpandedSubBlockStart.gif                writer.Write("<param name=\"movie\" value=\"{0}\">{1}"this.Path, Environment.NewLine);
 99InBlock.gif                if (!Helper.IsNullOrEmpty(this.FlashQuality))
100ExpandedSubBlockStart.gif                    writer.Write("<param name=\"quality\" value=\"{0}\">{1}"this.FlashQuality, Environment.NewLine);
101InBlock.gif                if (this.IsFlashTransparent)
102InBlock.gif                    writer.Write("<param name=\"wmode\" value=\"transparent\">{0}", Environment.NewLine);
103ExpandedSubBlockStart.gif                writer.Write("<embed src=\"{0}\" quality=\"{1}\" width=\"{2}\" height=\"{3}\" name=\"movie\" align=\"\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\">{4}", this.Path,this.FlashQuality, this.Width == Unit.Empty ? 480 : this.Width, this.Height == Unit.Empty ? 60 : this.Height, Environment.NewLine);
104InBlock.gif                writer.Write("</object>");
105ExpandedSubBlockEnd.gif            }

106InBlock.gif            else if (!Helper.IsNullOrEmpty(this.Path))
107ExpandedSubBlockStart.gif            {
108ExpandedSubBlockStart.gif                writer.Write("<img src=\"{0}\" width=\"{1}\" height=\"{2}\" alt=\"{3}\" border=\"0\"/>"this.Path, this.Width == Unit.Empty ? 480 : this.Width, this.Height == Unit.Empty ? 60 : this.Height, this.ToolTip);
109ExpandedSubBlockEnd.gif            }

110InBlock.gif            base.RenderContents(writer);
111ExpandedSubBlockEnd.gif        }

112ExpandedSubBlockEnd.gif    }

113ExpandedBlockEnd.gif}

114 None.gif
  

  也许有些属性还没封装好,希望批评指教!


本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2006/12/13/aspnet_servercontrol_banner_flash_image.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
2月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
39 8
|
1月前
|
开发框架 JavaScript 前端开发
|
2月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
45 0
|
2月前
|
前端开发 安全 开发者
JSF文件上传,让Web应用如虎添翼!一招实现文件上传,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,文件上传是重要功能之一。JSF(JavaServer Faces)框架提供了强大的文件上传支持,简化了开发流程。本文将介绍JSF文件上传的基本步骤:创建前端表单、处理上传文件的后端Action类、将文件保存到服务器指定目录以及返回结果页面。通过示例代码,我们将展示如何利用JSF实现文件上传功能,包括使用`h:inputFile`控件和`ManagedBean`处理上传逻辑。此外,JSF文件上传还具备类型安全、解耦合和灵活性等优点,有助于提升程序的健壮性和可维护性。
27 0
|
2月前
|
缓存 前端开发 测试技术
Angular 与 Angular Universal 超厉害!实现服务器端渲染,开启高效开发与优质用户体验之旅!
【8月更文挑战第31天】在现代前端开发中,用户体验至关重要。Angular Universal 为 Angular 应用提供服务器端渲染(SSR)解决方案,显著提升性能和可访问性。本文介绍 SSR 的优势,包括更快的首屏加载时间、更好的 SEO 和更稳定的用户体验。接着详细讲解安装和配置 Angular Universal 的步骤,并提供优化 SSR 性能的方法,如延迟加载、缓存和预取技术。同时讨论了处理动态内容的策略,并介绍了测试和部署的最佳实践。通过遵循这些实践,可以确保应用高效稳定运行,提升用户体验。附带的示例代码展示了如何在服务器端和客户端处理数据。
22 0
|
2月前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
16 0
|
2月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
17 0
|
3月前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
73 2
|
24天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
下一篇
无影云桌面