Web Part 教程--自定义 Web Part

整个教程连接

Web Part 教程--简介
Web Part 教程--自定义 Web Part
Web Part 教程--Web Part 连接
Web Part 教程--深入理解 Web Part Manager & Zone

 

 

二、自定义 Web Part
      作为门户应用的基本构建元素,Web parts 主要是作为动态信息展示组件而添加到页面上。Web part 一般包含一个标题栏(Title)、边框(Border)、显示内容的主体部分(Body)。跟普通控件一样,可以很方便的把样式表和主题风格应用到 Web Part。


Web Part 直接相关的有三个接口:
1、IWebPart
    主要接口,描述 Web Part 的核心属性,如标题、说明、宽度、高度等。
    包括下列成员:

  •     CatalogIconImageUrl 分类图标文件链接
  •     Description 说明
  •     Subtitle    副标题
  •     Title       标题
  •     TitleIconImageUrl   在标题栏显示的图标链接
  •     TitleUrl            标题栏链接

    
    有几个跟 Web Part 属性相关的特性(Attribute)要注意一下:

  •     Personalizable  标示属性是否可以个性化,只能用于有可读/写的公共属性,该属性不能有参数,不能是索引器
  •     WebBrowsable    标示属性是否在 PropertyGridEditorPart 中显示
  •     WebDisplayName  编辑时属性显示的名字
  •     WebDescription  编辑时属性的提示

    还有几个是通讯用的特性,下一章再细述。
    
2、IWebActionable
    在前面的练习中你可能已经注意到每个 Web Part 都有一个菜单,菜单项有关闭、最小化等,专业术语叫“动词”(verbs),显示在 Zone 里面的 Web Part 都有一个默认的动词集,包括关闭、最小化、恢复、删除、编辑和导出,根据页面当前模式决定哪些动词可见。
    IWebActionable 有一个成员 Verbs,返回动词集合 WebPartVerbCollection。自定义动词时用 WebPartEventHandler 把点击动词时的操作关联起来。
    
3、IWebEditable
    把 Web Part 跟自定义的编辑控件关联起来,有两个成员要实现:

  •     CreateEditorParts 方法   返回一个自定义编辑控件的集合 EditorPartCollection
  •     WebBrowsableObject  属性  返回一个要显示在自定义编辑控件里的控件引用

    
下面自己动手来写一个 Web Part,简单的对 HyperLink 作一下封装,把链接和名字显露出来,同时在菜单项增加一个动词,仅演示用,顺便做下广告:)
1、新建一个 Class Library 项目 WebPartLib
2、在项目中添加一个类文件 HyperLinkWebPart.cs
3、在类文件中添加引用:
using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts;

4、修改类的声明:
继承自 WebPart,并实现 IWebActionable 接口

5、添加几个属性:
HyperLink hl; string url = "http://shop36641266.taobao.com/"; string name = "俺的淘宝店";
    
6、添加两个要暴露出来的公共属性:
[Personalizable(), WebBrowsable, WebDisplayName("URL"), WebDescription("Assign a url to the link.")] public string Url { get { return url; } set { url = value; if (hl != null) { hl.NavigateUrl = url; } } } [Personalizable(), WebBrowsable, WebDisplayName("Display Name"), WebDescription("A friendly name.")] public string Name { get { return name; } set { name = value; if (hl != null) { hl.Text = name; } } }
        
7、添加一个动词到菜单项:
public override WebPartVerbCollection Verbs { get { // Create a verb WebPartVerb displayCtrlIdVerb = new WebPartVerb( "DisplayCtrlIdVerb", new WebPartEventHandler(DisplayCtrlID)); // Associate it's properties to values displayCtrlIdVerb.Text = "Display Control ID"; displayCtrlIdVerb.Description = "My first test verb."; displayCtrlIdVerb.Visible = true; displayCtrlIdVerb.Enabled = true; // Add it to a collection and return return new WebPartVerbCollection(base.Verbs, new WebPartVerb[] { displayCtrlIdVerb }); } } // The WebPartEventHandler delegate implement protected void DisplayCtrlID(object sender, WebPartEventArgs e) { Title += " Id: " + ClientID; }
        
    这个菜单的功能就是每次点击时在标题栏上把控件自己标识附加在后面。
    
8、重载 CreateChildControls 方法:
protected override void CreateChildControls() { hl = new HyperLink(); hl.Target = "_blank"; hl.NavigateUrl = url; hl.Text = name; this.Controls.Add(hl); base.CreateChildControls(); }
        
    由 ASP.NET 页面框架调用,以通知服务器端控件创建子控件。也可以直接重载 Render 来渲染显示控件,不过比较麻烦,要处理很多的显示细节,不在本文讨论范围,想详细了解的话请参考 ASP.NET Web 控件编写的资料。
    
9、编译此项目

10、测试该 Web Part
    转到前一节创建的 Web Application,新建或打开前面创建的页面,在设计窗口,把创建的 Web Part 添加到工具箱(在工具箱某栏目右击-->Chose Items-->Browser,选中 WebPartLib.dll,勾选 HyperLinkWebPart,确定) ,把 HyperLinkWebPart 拖到某个 WebPartZone 或者是放到 CatalogZone 的模板里,运行。
   
   
   作业:普通控件并没有实现 IWebPart 这些接口,为什么可以添加到 WebPartZone?

你可能感兴趣的:(Web,String,properties,url,asp.net,Hyperlink)