创建自定义的WebPart

创建一个自定义的WebPart控件类似与创建自定义服务器控件,其构建的内容包括很多方面:
(1)构造函数
        创建自定义的WebPart必须继承自WebPart类,在自定义类的构造函数中对WebPart的固有属性进行设置,如Title、AllowColse等。
(2)行为属性
        主要包括重写AllowClose、AllowEdit、AllowConnect等“Allow”类型行为属性。虽然可以在类构造函数中对这些“Allow”类型属性设置默认值,但是通过重写属性可以更好的保护行为属性不被修改。
(3)CreatChildControls、RenderControl和RendContents方法
        以上3个方法继承自Control类或者WebControl基类。通过重写这些方法,可以为自定义的WebPart添加子控件、字符串等内容,从而实现自定义WebPart的显示内容、外观和样式等。
(4)自定义操作项
        WebPart类本身提供了很多个操作项,如,Close、Edit、Delete等。开发人员可以实现自定义的操作项来增加灵活性,其实现的核心是创建自定义的WebPartVerb对象。
(5)CreatEditorParts方法
        如果要在编辑区域中对自定义属性进行编辑,必须实现CreatEditorParts方法。
(6)元数据属性
        在自定义类中创建自定义属性的时候,可以在该属性前添加[Personalizable(), WebBrowsable]。Personalizable表示是个性化属性能够持久保存;WebBrowsable表示该属性能够在编辑模型下被用户修改。

实现一个自定义的WebPart:

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register TagPrefix="cc1" Namespace="Samples.AspNet.CS.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head id="Head1" runat="server">
</head>
<body>
    
<form id="Form1" runat="server">
        
<asp:WebPartManager ID="WebPartManager1" runat="server" />
        
<asp:WebPartZone ID="WebPartZone1" runat="server" title="Zone 1" BorderColor="#CCCCCC" Font-Names="Verdana" Padding="6">
            
<PartTitleStyle Font-Bold="true" ForeColor="White" BackColor="#5D7B9D" Font-Size="0.8em" />
            
<PartStyle BorderWidth="1px" BorderStyle="Solid" BorderColor="#81AAF2" Font-Size="0.8em" ForeColor="#333333" />
            
<ZoneTemplate>
                
<cc1:TextDisplayWebPart runat="server" ID="textwebpart" Title="Text Content WebPart" AllowClose="False" />
            
</ZoneTemplate>
            
<PartChromeStyle BackColor="#F7F6F3" BorderColor="#E2DED6" Font-Names="Verdana" ForeColor="White" />
            
<MenuLabelHoverStyle ForeColor="#E2DED6" />
            
<EmptyZoneTextStyle Font-Size="0.8em" />
            
<MenuLabelStyle ForeColor="White" />
            
<MenuVerbHoverStyle BackColor="#F7F6F3" BorderColor="#CCCCCC" BorderStyle="Solid"
                BorderWidth
="1px" ForeColor="#333333" />
            
<HeaderStyle Font-Size="0.7em" ForeColor="#CCCCCC" HorizontalAlign="Center" />
            
<MenuVerbStyle BorderColor="#5D7B9D" BorderStyle="Solid" BorderWidth="1px" ForeColor="White" />
            
<TitleBarVerbStyle Font-Size="0.6em" Font-Underline="False" ForeColor="White" />
            
<MenuPopupStyle BackColor="#5D7B9D" BorderColor="#CCCCCC" BorderWidth="1px" Font-Names="Verdana"
                Font
-Size="0.6em" />
        
</asp:WebPartZone>
    
</form>
</body>
</html>


TextDisplayWebPart.cs在App_Code目录中

TextDisplayWebPart.cs
using System;
using System.Security.Permissions;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls
{
    [AspNetHostingPermission(SecurityAction.Demand,
      Level 
= AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand,
      Level 
= AspNetHostingPermissionLevel.Minimal)]
    
public class TextDisplayWebPart : WebPart
    
{
        
private String _contentText = null;
        TextBox input;
        Label DisplayContent;

        
public TextDisplayWebPart()
        
{
            
this.AllowClose = false;            
        }


        [Personalizable(), WebBrowsable]
        
public String ContentText
        
{
            
get return _contentText; }
            
set { _contentText = value; }
        }


        
protected override void CreateChildControls()
        
{
            Controls.Clear();
            DisplayContent 
= new Label();
            DisplayContent.BackColor 
=
              System.Drawing.Color.LightBlue;
            DisplayContent.Text 
= this.ContentText;
            
this.Controls.Add(DisplayContent);
            input 
= new TextBox();
            
this.Controls.Add(input);
            Button update 
= new Button();
            update.Text 
= "Set Label Content";
            update.Click 
+= new EventHandler(this.submit_Click);
            
this.Controls.Add(update);
            ChildControlsCreated 
= true;
        }


        
private void submit_Click(object sender, EventArgs e)
        
{
            
// Update the label string.
            if (input.Text != String.Empty)
            
{
                _contentText 
= input.Text + @"<br />";
                input.Text 
= String.Empty;
                DisplayContent.Text 
= this.ContentText;
            }

        }

    }

}

效果图:
Text Content WebPart  u
 最小化 
33339

你可能感兴趣的:(创建自定义的WebPart)