Asp.net自定义控件开发任我行(5)-嵌入资源上
摘要
上一篇我们讲了VitwState保存控件状态,此章我们来讲讲嵌入css文件,js文件,嵌入Image文件我也一笔带过.
内容
随着我的控件的完善,我们目标控件DropDwonCheckList最终一定会呈现很多的Html代码,我们虽然可以用C#控制样式,但代价太大,维护起来困难,复用用性低,而且样式也会随着控件的呈现而被呈现出来,没有达到真正的封装。通过学习本章内容,大家可以做一个实验,看看如果没有使用嵌入样式表的方法,呈现的HTML代码。
嵌入资源分三个步骤走:
1.在XYB.Controls层新建一个文件夹,命名为CSS文件夹,再新建dropDwon.css样式文件,将dropDwon.css样式文件属性设为嵌入资源。
2.修改AssemblyInfo.cs文件,在里面添加下面一行代码
[assembly:System.Web.UI.WebResource("XYB.Controls.CSS.dropDwon.css","text/css")]
XYB.Controls是我的命名空间,CSS是我的文件夹名称,dropDwon.css是文件名,也就是命名空间+文件夹+文件名,如果没有文件夹,就不用写文件夹名称了,"text/css",是MIME类型,如果不知道MIME类型的,上网百度一下,这个不在我们的讨论范围内。
3.程序中加载使用,我们在重写OnPreRender方法(预呈现,在Render之前发生)里面写点代码,加载嵌入css文件
protected override void OnPreRender(EventArgs e)
{ base.OnPreRender(e);
//如果文件已经被加载了,就不用重复加载
if (this.Page.Header.FindControl("XYB_Controls_dropDwonCss")==null)
{
//加载嵌入资源.css文件
string cssHref = this.Page.ClientScript.GetWebResourceUrl(this.GetType(),"XYB.Controls.CSS.dropDwon.css");
string cssLink = string.Format("<link href='{0}' rel='stylesheet' type='text/css' />", cssHref);
LiteralControl litLink = new LiteralControl(cssLink);
litLink.ID = "XYB_Controls_dropDwonCss";
this.Page.Header.Controls.Add(litLink);
}
}
现在我们再把修改Render方法,其实就是注释掉了pnlDropDown.Style["border"] = "1px solid #ccc"
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Panel pnlDropDown = new Panel();
pnlDropDown.ID = "XYB_Controls_DropDownPanelID";//名字写这么长,只为防止别人与我的控件ID相同
pnlDropDown.Height = DropDwonHeight;
pnlDropDown.Width = DropdwonWidth;
//pnlDropDown.Style["border"] = "1px solid #ccc";//设置边框样式
pnlDropDown.RenderControl(writer);//把下拉框呈现到网页上
}
我把dropDwon.css页面的代码也粘贴出来吧
#XYB_Controls_DropDownPanelID{
border:1px solid #ccc;
}
我把整个页面代码也粘贴出来吧,方便大家偷懒,复制一下就行了,之后的文章,我可能不会把整个页面的代码粘贴出来了
using System;
using System.Text;
using System.Web.UI;
using System.ComponentModel;//包含组件开发所必须含有的(属性)Attribute;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Generic; namespace XYB.Controls
{
public class TextEdit:TextBox
{
#region 属性与字段
private int _dropDwonHeight;
private int _dropdwonWidth; [Description("下拉框的高度"),//属性的描述
Category("下拉框")//所属目录
]
public int DropDwonHeight
{
//如果前台控件没有给DropDwonHeight赋值,那它的初始值是50
get { return ViewState["DropDwonHeight"] == null ? : Convert.ToInt32(ViewState["DropDwonHeight"]); }
set { ViewState["DropDwonHeight"] = value; }
} [Description("下拉框的宽度"),
Category("下拉框")
]
public int DropdwonWidth
{
get { return ViewState["DropdwonWidth"] == null ? : Convert.ToInt32(ViewState["DropdwonWidth"]); }
set { ViewState["DropdwonWidth"] = value; }
}
#endregion protected override void OnPreRender(EventArgs e)
{ //如果文件已经被加载了,就不用重复加载
if (this.Page.Header.FindControl("XYB_Controls_dropDwonCss")==null)
{
//加载嵌入资源.css文件
string cssHref = this.Page.ClientScript.GetWebResourceUrl(this.GetType(),"XYB.Controls.CSS.dropDwon.css");
string cssLink = string.Format("<link href='{0}' rel='stylesheet' type='text/css' />", cssHref);
LiteralControl litLink = new LiteralControl(cssLink);
litLink.ID = "XYB_Controls_dropDwonCss";
this.Page.Header.Controls.Add(litLink);
}
base.OnPreRender(e);
} protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Panel pnlDropDown = new Panel();
pnlDropDown.ID = "XYB_Controls_DropDownPanelID";//名字写这么长,只为防止别人与我的控件ID相同
pnlDropDown.Height = DropDwonHeight;
pnlDropDown.Width = DropdwonWidth;
//pnlDropDown.Style["border"] = "1px solid #ccc";//设置边框样式
pnlDropDown.RenderControl(writer);//把下拉框呈现到网页上
}
}
}
最后我们再重新生成一下,运行查看效果,一样的,效果图如下

和之前的一模一样,说明.css文件已经被嵌入进去了,我把嵌入的.css呈现出来的源文件也粘贴出来
<link href='/WebResource.axd?d=olxWdg1PRQwoM2C5kFryz0r-e5iv0mo6Hhq6QXJVp3rCs-vS9V1D3mWKk95a425mVceqNdG1fXuFTymtP59K-0A6o0FVd_i5wW8rUi6taUIt5QeywuRKjRDmrg7pOdq9Ydt1IMEaOQ5PL2tF9yCGOQ2&t=635150192328935925' rel='stylesheet' type='text/css' />
下集预告
嵌入.js文件,敬请关注我,如果有什么问题,可以给我留言。
Asp.net自定义控件开发任我行(5)-嵌入资源上的更多相关文章
- Asp.net自定义控件开发任我行(6)-嵌入资源下
摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...
- Asp.net自定义控件开发任我行(附1)-属性一览众山小
元数据属性应用于服务器控件及其成员,从而提供由设计工具.ASP.NET 页分析器.ASP.NET 运行库以及公共语言运行库使用的信息.当页开发人员在可视化设计器中使用控件时,设计时属性能改进开发人员的 ...
- Asp.net自定义控件开发任我行(4)-ViewState保存控件状态
摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...
- Asp.net自定义控件开发任我行(2)-TagPrefix标签
摘要 前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签.大家可能看到了上一篇中拖放进来的代码是 <cc1:TextEdit ID="TextEdi ...
- Asp.net自定义控件开发任我行(8)-数据集绑定
摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...
- Asp.net自定义控件开发任我行(3)-Render
摘要 上一篇我们讲到了自定义标签TagPrefix用法,此篇我们来讲一下控件的呈现,主要是呈现下拉框 内容 呈现的方法有,Render,RenderControl,RenderChildren,这三个 ...
- Asp.net自定义控件开发任我行(7)-注册自定义事件
摘要 前面我们已经把嵌入资源讲完了,不知道大家有没有得到收益,本章主要讲自定义事件,也就是给TextBox注册一个点击事件. 引言 不知道道上的朋友有没有注意到TextBox控件没有点击事件,就连网上 ...
- Asp.net自定义控件开发任我行(1)-笑傲江湖
1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...
- Asp.net 自定义控件开发相关的几种嵌入资源解决方案
前提: 如下将要介绍的几种类型资源都要在其属性页窗口, 将 <生成操作> 属性, 设置为[嵌入的资源], 如图: ► 给自定义控件添加自定义图标的几种方案 方法一: 直接在自定义控 ...
随机推荐
- 【extjs6学习笔记】1.12 初始: Working with DOM
http://www.extjs-tutorial.com/extjs/working-with-dom Ext JS是一个DHTML库. 它通过使用JavaScript创建或操作DOM元素来创建UI ...
- 百倍性能的PL/SQL优化案例(r11笔记第13天)
我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,“”自黑“”一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本 ...
- ubuntu14.04安装gradle
一.下载gradle $ wget https:////services.gradle.org/distributions/gradle-3.5.1-all.zip $ sudo unzip grad ...
- hihoCoder #1143 : 骨牌覆盖问题·一 (斐波那契数列)
题意:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对于这个棋盘,一共有多少种不同的覆盖方法呢? 思路:这是斐波那契数列啊,f[n] = f[n-1] + f[n-2],初始时 f[ ...
- C++ vector容器类型的用法及注意
转自http://www.cnblogs.com/charley_yang/archive/2010/12/11/1903040.html vector类为内置数组提供了一种替代表示,与string类 ...
- 初见微服务之RESTful API
1. REST名称由来 REST全称为Representational State Transfer,即表述性状态转移,最早由Roy Feilding博士在世纪之交(2000年)提出,喜欢追根溯源的朋 ...
- 倍增LCA
前言 在做树上问题时,我们经常会遇到 \(LCA\)(最近公共祖先)问题.曾经的我遇到这类问题只会\(O(n)\)暴力求解,学了倍增\(LCA\),就可以\(O(logn)\)解决了. 简介 倍增\( ...
- 【洛谷1967】货车运输(最大生成树+倍增LCA)
点此看题面 大致题意: 有\(n\)个城市和\(m\)条道路,每条道路有一个限重.多组询问,每次询问从\(x\)到\(y\)的最大载重为多少. 一个贪心的想法 首先,让我们来贪心一波. 由于要求最大载 ...
- 5.1 Object类型
创建Object实例的方式有两种 ① 使用new操作符跟Object构造函数 var person = new Object(); person.name = "Tom"; pei ...
- JS中进行浮点数计算式,遇到的问题
今天在做项目时,需要在页面进行计算,但是当两个数都是小数时,计算的结果却不是想象中的: 比如1371.3-0.9算出来却是1370.39999999,后来上网搜一下,原来js是弱类型语言,没有那么高的 ...