前面第一天 我们看到的全是 js的代码,虽然不管是BS的框架是java 还是 php,复用性 还是特别高的,  但是 写起来比较费劲,怎么办,我们能不能 更 简单点呢?

当然可以,这个时候我们就要用到  .net的自定义控件 了。

首先我们 将第一天的代码  回顾一下,(下面我们有了一个初始的改变)

//这里运用的面向对象的思想 ,新建了一个按钮对象
var button = function () {
this.control = null; //属性: 按钮对象的 自己
this.id = null; //按钮对象的 id
this.value = null; //按钮对象显示的值
this.click = null; //按钮对象的点击事件
//接下来是初始化, 所有 按钮的属性
this.init = function (ClientId) {
this.id = ClientId; //这个是页面传过来的id var button_html = '<div href="#" id="button_'+this.id+'" class="button" > ' + this.value + '</div>'; // 这个是我们要插入 的 html文件
this.control.after(button_html); this.control = $("#" + ClientId); //这是通过 id绑定控件 (有关 需找 标签 都要写到 页面加载完 标签之后执行)
//绑定点击事件 14 $("#button_"+this.id+).unbind("click").bind("click",this.click); 15 this.control.hide(); //隐藏 当前控件
};
}

  

首先我们建立一个 类库  Control  ,  然后在建立一个 建立一个 ControlBase (  这个类 是所有控件类的 父类)

 public class ControlBase : WebControl    // 继承webControl
{
/// <summary>
/// 加载
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e) // 重写 页面加载
{
base.OnLoad(e);
} /// <summary>
/// 为指定页面添加一个自定义控件,需要放在 if(!IsPostBack){ } 之外才行。
/// </summary>
/// <param name="page">页面</param>
public static void AddWebcontrolBaseToPage(Page page)
{
for (int i = ; i < page.Controls.Count; i++)
{
if (page.Controls[i] is ControlBase)
{
return;
}
}
ControlBase controlbase = new ControlBase();
page.Controls.Add(controlbase);
} /// <summary>
/// 注册资源文件
/// </summary>
/// <param name="strLink">资源字符串</param>
/// <param name="control">控件</param>
public static void RegisterSource(string strLink, System.Web.UI.Control control)
{
//为了保证资源只注册一次,循环比较,已存在了就不添加
bool flag = false;
for (Int32 i = ; i < control.Page.Header.Controls.Count; i++)
{
LiteralControl lc = control.Page.Header.Controls[i] as LiteralControl;
if (lc != null)
{
if (lc.Text == strLink)
{
flag = true;
break;
}
}
}
if (!flag)
{
LiteralControl include = new LiteralControl(strLink);
control.Page.Header.Controls.Add(include);
}
} /// <summary>
/// 控件添加属性
/// </summary>
/// <param name="writer"></param>
/// <param name="Name"></param>
/// <param name="Value"></param>
protected void AddAttributeToControl(HtmlTextWriter writer, string Name, string Value)
{
if (!string.IsNullOrEmpty(Value))
{
writer.AddAttribute(Name, Value);
}
}
}

然后 我们 在建立一个类 ,叫做 Button 的类,写法如下:

 public class Button : ControlBase
{
#region 属性
/// <summary>
/// 属性测试
/// </summary>
[DefaultValue(""), Description("获取或设置页面ID")]
public string FormID
{
get;
set;
} /// <summary>
/// 设置页面样式表
/// </summary>
public string Class // 这些属性都会在 页面呈现出来
{
get;
set;
}
#endregion #region 重载方法
/// <summary>
/// 设置装载容器
/// </summary>
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
} /// <summary>
/// 控件加载其他操作方法
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
} /// <summary>
/// 输出控件前操作
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
} /// <summary>
/// 输出控件
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
if (this.Visible)
{
writer.WriteLine("<script type='text/javascript'>");
writer.WriteLine("//<![CDATA[");
string query = this.ClientID + "_ButtonGroup";
writer.WriteLine("var " + query + "= new Button();");
writer.WriteLine(query + ".Init('" + this.ClientID + "','加载数据')");
writer.WriteLine("//]]>");
writer.WriteLine("</script>");
}
} /// <summary>
/// 控件中添加控件
/// </summary>
/// <param name="writer"></param>
protected override void RenderContents(HtmlTextWriter writer)
{
base.RenderContents(writer);
} /// <summary>
/// 给控件添加属性
/// </summary>
/// <param name="writer"></param>
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
writer.AddAttribute("class", "btn_container " + this.Class);
if (!string.IsNullOrEmpty(this.FormID))
{
writer.AddAttribute("FormID", this.FormID);
}
}
#endregion #region 自定义方法
/// <summary>
/// 获取组织数据
/// </summary>
/// <returns></returns>
private void OtherMethod()
{ }
#endregion
}

  接下来 我们怎么将她们 用到前台呢?

首先 我们要添加该项目的引用:

然后在配置文件中配置:

如下图所看到的一样:

namespace  表示 添加引用的  项目的   命名空间的地址       如下图:Control 表示类库的名称
assembly  表示你需要添加的   引用的地址
tagPrefix  表示你添加 标签 名称:  
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false">
<controls>
<add namespace="Control" assembly="Control" tagPrefix="BaseControls"/>
</controls>
</pages>

  然后我们新建一个 web页面,重新生成一下,打开 工具箱就 可以看到你要的控件了。

或者 直接 输入 <BaseControls:           就能看到你要写的自定义控件了

<BaseControls:Button  Class="2323" ID="2323" runat="server"/>

.net 控件开发第二天 怎么将 第一天写的代码 用到 .net中来的更多相关文章

  1. 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

    Dixon 原文  用ArcGIS Engine.VS .NET和Windows控件开发GIS应用     此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署 ...

  2. ASP.NET2.0组件控件开发视频 初体验

    原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...

  3. ASP.NET自定义控件组件开发 第五章 模板控件开发

    原文:ASP.NET自定义控件组件开发 第五章 模板控件开发 第五章 模板控件开发 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...

  4. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...

  5. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡

    原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl  后篇 --事件冒泡 系列文章链接: ASP.NET ...

  6. 最全的基于MFC的ActiveX控件开发教程

    浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...

  7. JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动

    JavaScript日历控件开发   概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...

  8. 【转载】基于MFC的ActiveX控件开发(1)

    原文:http://iysm.net/?p=114 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一 ...

  9. ActiveX控件开发

    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...

随机推荐

  1. 【j2ee spring】30、巴巴荆楚网-综合hibernate4+spring4(5)分页

    巴巴荆楚网-综合hibernate4+spring4(5)分页 1.图文项目 2.首先我们引入对应的jar包 3.我们配置一下数据库中对应的实体对象 ProductType.java /** * 功能 ...

  2. form 为什么上传文件enctype现场

    FORM要素enctype属性指定表单数据server当提交所使用的编码类型,默认默认值它是"application/x-www-form-urlencoded". 这样的编码方式 ...

  3. 如何成为游戏的生产者——第二章:如何开始你的编程(开发环境的搭建、C++语言适应)

    如何成为游戏的生产者--文章二章:怎样開始你的编程 小故事:上节说到我六年级打开了那本C语言的书,然后其实我还是没看懂.好像看懂了一些printf语句.之后遇到了史无前例的困难--怎么让代码执行起来. ...

  4. [课程分享]IT软件项目管理(企业项目甘特如是评价、维护管理、文档管理、风险管理、人力资源管理)

    [课程分享]IT件项目管理(企业项目甘特图案例评价.维护管理.文档管理.风险管理.人力资源管理) 对这个课程有兴趣的朋友能够加我的QQ2059055336和我联系 课程讲师:丁冬博士 课程分类:Jav ...

  5. javascript 模块化编程 1

    var myModule=(function(){ var models={}; function define(name,deps,cb){ var tk=[]; for(var i=0,l=dep ...

  6. SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式

           于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...

  7. [Python]新手写爬虫全过程(转)

    今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...

  8. GDI+学习笔记(六)渐变画笔

    刷,顾名思义,它是一样的刷.提请设备,还记得常唱歌曲,"我是一个画家.." 好吧.跑题了. 本系列博客希望尽可能简单的描写叙述每项功能,而不希望把每一个參数都介绍的详具体细,假设须 ...

  9. SQL Server创建索引

    原文:SQL Server创建索引 什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的 ...

  10. Suse发生了错误Access denied for user &#39;&#39;@&#39;localhost&#39; to&amp;

    好久没实用MySQL了,上次由于装了Banq的论坛系统.在用MySQL Administrator进去的时候居然提示mysql error number 1045 access denied for ...