代码:
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoWebControl { /// <summary> /// 自己的Asp.Net服务器组件 Image:输出内嵌的在程序集中的 图片资源 /// </summary> public class DemoImage : WebControl { protected bool IsDesignMode { get { return DesignMode || HttpContext.Current == null || Page == null; } } public DemoEnumImage DemoEnumImage { get; set; } //通过用户在 属性中的设置,将内嵌的图片 作为 IMG标签 输出到 页面 protected override void Render(HtmlTextWriter output) { string imageUrl = string.Empty; if (Page!=null) { if(DemoEnumImage==DemoEnumImage.Image01) imageUrl = Page.ClientScript.GetWebResourceUrl(GetType(), @"DemoWebControl.Resources.DemoImage01.jpg"); else if (DemoEnumImage == DemoEnumImage.Image02) imageUrl = Page.ClientScript.GetWebResourceUrl(GetType(), @"DemoWebControl.Resources.DemoImage02.jpg"); else if (DemoEnumImage == DemoEnumImage.Image03) imageUrl = Page.ClientScript.GetWebResourceUrl(GetType(), @"DemoWebControl.Resources.DemoImage03.jpg"); } output.Write("<image id="" + ClientID + "" name="" + ClientID + "" class="" + CssClass + "" src="" + imageUrl + "" />"); } } [Serializable] public enum DemoEnumImage { Image01, Image02, Image03, } }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoImagePage.aspx.cs" Inherits="AspNetDemo.DemoImagePage" %> <%@ Register assembly="DemoWebControl" namespace="DemoWebControl" tagprefix="Demo" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <style type="text/css"> .Demo{ border: 1px solid RED; } </style> </head> <body> <form id="form1" runat="server"> <div> <Demo:DemoImage ID="DemoImage1" DemoEnumImage="Image03" CssClass="Demo" runat="server" /> </div> </form> </body> </html>
嵌入资源:
运行截图:
相关技术点:
- 将一个图片资源 内嵌到 程序集中,需要设置 文件VS属性(生成操作:签入的资源);
- 程序集项目 AssemblyInfo.cs 中需要加入如下代码(其中 WebResource 包括 资源名称,资源类型):
-
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] //此标识 可以让 拖拽的控件 自动以 Demo 作为 tagprefix 属性,比如: //<%@ Register assembly="DemoWebControl" namespace="DemoWebControl" tagprefix="Demo" %> [assembly: TagPrefix("DemoWebControl", "Demo")] [assembly: WebResource("DemoWebControl.Resources.DemoImage01.jpg", "image/jpeg")] [assembly: WebResource("DemoWebControl.Resources.DemoImage02.jpg", "image/jpeg")] [assembly: WebResource("DemoWebControl.Resources.DemoImage03.jpg", "image/jpeg")] [assembly: WebResource("DemoWebControl.Resources.DemoCss01.css", "text/css")] [assembly: WebResource("DemoWebControl.Resources.DemoJs01.js", "text/javascript")]
- 获取 程序集中的 内嵌文件的 Url代码是:Page.ClientScript.GetWebResourceUrl(GetType(), @"资源名称");
相关系列文章链接:
- 『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
- 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
- 『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件
- 『Asp.Net 组件』Asp.Net 服务器组件 内嵌CSS:将CSS封装到程序集中
- 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来
- 『Asp.Net 组件』Demo源码在线阅读