在我们自定义控件的时候,很多地方需要我们自己去写.
这篇文章就常用到的内容和方法进行介绍
一、任何让生成的控件具有自己的TagPrefix?
如:FreeTextBox控件,当你在工具栏把它拖入页面时,你可以看下HTML代码,它代码如下:<FTB:FreeTextBox id = "FreeTextBox1" ......></FTB>
TagPrefix说的就是这个FTB。
其实在开发的时候非常见到,只需要在命名空间上方加入代码:
[assembly:TagPrefix("FreeTextBoxControls", "FTB")]就可以了。
例如:FreeTextBox 控件的做法就是这样的
[assembly:TagPrefix("FreeTextBoxControls", "FTB")]就可以了。
namespace FreeTextBoxControls
二、一般来说自定义控件需要继承几个接口
public class FreeTextBox: WebControl,INamingContainer,IPostBackDataHandler
下面一一进行讲解
1、WebControl,Control都可以
这表明是从WebControl或Control继承的。
=====================================================
2、INamingContainer
MSDN给出的解释为:标识在 Page 对象的控件层次结构内创建新 ID 命名空间的容器控件。这仅是一个标记接口。
那么作用是什么?
避免同一页上的命名冲突(说白的就是:假如你的页面中拖入两个FreeTextBox,你会发行它两个FreeTextBox的ID都是不一样的,自动的生成不一样的ID)。
=====================================================
3、IPostBackDataHandler
定义 ASP.NET 服务器控件为自动加载回发数据而必须实现的方法。
当要使编程方式实现的控件实现数据自动回发时,就必须要实现这个接口
通俗的解释:你开发的自定义控件需要数据回发时,需要用到此接口
公共方法
LoadPostData 当由类实现时,为 ASP.NET 服务器控件处理回发数据。
RaisePostDataChangedEvent 当由类实现时,用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。
#region================LoadPostData==========================
public bool LoadPostData(String postDataKey, NameValueCollection values)
{
string PresentValue = this.ViewStateText;
string PostedValue = values[base.ID];
if (!PresentValue.Equals(PostedValue))
{
this.Text = PostedValue;
return true;
}
else
{
return false;
}
}
#endregion
public bool LoadPostData(String postDataKey, NameValueCollection values)
{
string PresentValue = this.ViewStateText;
string PostedValue = values[base.ID];
if (!PresentValue.Equals(PostedValue))
{
this.Text = PostedValue;
return true;
}
else
{
return false;
}
}
#endregion
#region================RaisePostDataChangedEvent==========================
public void RaisePostDataChangedEvent()
{
// nothing happens for text changed
}
#endregion
public void RaisePostDataChangedEvent()
{
// nothing happens for text changed
}
#endregion
当然这些都是最基本的知识,更多的知识在后期我会继续讲述。