开发自定义控件-笔记1

最近闲来无事,就打算学下做自定义控件,具体做什么控件我就不说了,呵呵,因为这与下面的内容不会有什么关系!

控件目前还没有开发好,但过程中遇到两个问题,在这里记录一下!方便以后查阅!
第一:保存视图状态
     一般我们自己做的控件,如果不经过特殊处理的话,是不会保存asp.net特有的视图状态的,因为http是无状态的嘛!一个请求,一个响应,完全没有和上一次的请求能扯上关系,所以我们要做特殊的处理.以前查这方面的资料时,总没有什么思绪,不过后面发现了SaveViewState和LoadViewState这两个方法后,这问题就不是什么问题了,只要有小学的英语水平,单看这两个方法就知道什么意思了!下面是这两个方法的方法签名:
 protected override void LoadViewState(object state)
 protected override object SaveViewState()
显然,一个保存,一个加载.如果你想让你的数据能像asp.net里面的自带控件一样,可以保存到上一次请求响应的状态的话,只要调用SaveViewState()和LoadViewState()即可.具体请看下面的代码:
重写自定义控件的SaveViewState()方法
private string contextMenuItem;
protected override object SaveViewState()
{
    return contextMenuItem;
}
protected override void LoadViewState(object state)
{
    if (state == null) return;
    contextMenuItem = state.ToString();
    //自定义类型做法,前提是Person可序列化,当然,不序列化也可以,不过比较麻烦咯
    //if (state is List<Person>)
    //    contextMenuItem = (List<Person>)state;
}
这样就行了!就是这么简单:),其实大部分的事还是ms帮我们做了...

第二:自定义控件如何嵌入资源文件(javascript,图片之类的)
如果是javascript的话,有一个最简单,最笨的方法!
就是直接输出:Page.ClientScript.RegisterStartupScript(Page.GetType(), "js", jsCode);
上面这种方法遇到图片就没办法了,何况就算是js,也是最不可取的,主要是太难看了!
[assembly: WebResource("MyContextMenu.WebContextMenu.js", "application/x-javascript", PerformSubstitution = true)]
namespace MyContextMenu
{
   public class MenuControl : WebControl
   {
      //Code....
   }
}
PS:WebResource第一个参数是命名空间加上js文件的路径("/"用"."代替了)
   如果你的js文件是在一个叫Resources文件夹下,你就应该改成MyContextMenu.Resources.WebContextMenu.js
接重写OnPreRender()方法
 protected override void OnPreRender(EventArgs e)
{
   base.OnPreRender(e);
   Page.ClientScript.RegisterClientScriptResource(this.GetType(), "MyContextMenu.WebContextMenu.js");
}
最重要的一点要注意,就是需要把js文件的属性[生成操作设置成嵌入资源].步骤:选择文件->右键选择属性->设置生成操作=嵌入的资源!即可.

如果是图片文件话
[ToolboxBitmap(@"C:\1.bmp")]
namespace MyContextMenu
{
   public class MenuControl : WebControl
   {
      //Code....
   }
}
也是需要把图片文件设置成嵌入资源(具体步骤请看上面),编译项目,然后在工具箱中添加此控件就可以看到刚刚设置的图标效果.


目前遇到的问题就是这样了!如有误,请告之.

本文欢迎转载,但必须在文章显眼处保留原文地址:http://www.cnblogs.com/Ss_Andy/archive/2010/08/30/1812380.html

(发现以前的部分文章给转载后,转载者没有保留原文地址)

posted on 2010-08-30 10:37  Ss_Andy  阅读(368)  评论(0编辑  收藏  举报