已经看了几天的园子里大人的ASP.NET组件开发教程,今天终于有时间动手写点东西了
那知道一动手出了错误在这里特意提醒园子里的朋友不要范我同样的错误.
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.ComponentModel;
5using System.Web.UI;
6namespace UserControl
7{
8 [ToolboxData(@"<{0}:MyLabel runat='server'></{0}:MyLabel>")]
9 class MyLabel:System.Web.UI.WebControls.Label
10 {
11 protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
12 {
13
14 }
15 public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
16 {
17 writer.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.sina.com.cn");
18 writer.RenderBeginTag(System.Web.UI.HtmlTextWriterTag.A);
19 }
20 public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
21 {
22 writer.RenderEndTag();
23 }
24 protected override void RenderContents(HtmlTextWriter writer)
25 {
26 writer.Write("hello world!");
27 }
28 }
29}
内容没有什么好说的,都是很简单的东西.2using System.Collections.Generic;
3using System.Text;
4using System.ComponentModel;
5using System.Web.UI;
6namespace UserControl
7{
8 [ToolboxData(@"<{0}:MyLabel runat='server'></{0}:MyLabel>")]
9 class MyLabel:System.Web.UI.WebControls.Label
10 {
11 protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
12 {
13
14 }
15 public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
16 {
17 writer.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.sina.com.cn");
18 writer.RenderBeginTag(System.Web.UI.HtmlTextWriterTag.A);
19 }
20 public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
21 {
22 writer.RenderEndTag();
23 }
24 protected override void RenderContents(HtmlTextWriter writer)
25 {
26 writer.Write("hello world!");
27 }
28 }
29}
当我把这个控件添加到工具栏准备往ASPX页面拖时 问题出现了.在向aspx的页面设计器拖拽的时候鼠标变成禁止的状态.
原来定义的MyLabel类不是public的,通过进一步测试发现如果通过类库新建一个类,则该类默认的定义是class ClassName,没有public 前缀。而在vs2003的类库新建类不会出现此问题,不知道是vs2005的bug还是微软有什么其他的考虑?
如果定义的类没有public前缀,则你在编译或者调用的时候会发现编译错误。而此时如果通过页面设计器来拖拽该类,则会出现题目错误。如果vs2005 IDE工具箱只显示有public前缀的类,那么这个难于发现的问题同样的一避免,不过还是建议大家在新建类的时候注意public前缀。