自定义用户控件的WebPart (一) 加载自定义UserControl

本文介绍如何使用用户控件包装器简化WebPart开发流程,通过示例代码展示如何自定义加载用户控件,并解释了不同属性在工具窗格中的表现形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相信很多人都在使用用户控件包装器来开发Web Part,原因很简单,创建一个用户控件比直接用代码来写一个Web Part要简单N倍,特别对于界面比较丰富的Web Part而言。引自 KaneBoy:DelegateControl:SharePoint Server 2007内置的一个"用户控件包装器"; 下面是一个继承自System.Web.UI.WebControls.WebParts的WebPart,可以自定义加载的UserControl。

using System;

using System.ComponentModel;

using System.Runtime.InteropServices;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Serialization;



using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.WebPartPages;



namespace Simone.SharePoint.WebPart

{

    [XmlRoot(Namespace = "Simone.SharePoint.WebPart")]

    public class UserControlWebPart : System.Web.UI.WebControls.WebParts.WebPart

    {



        public UserControlWebPart()

        {

        }



        private const string defaultText = "";

        private string _userControl;

        private UserControl _control;

        private LiteralControl _child;



        [WebBrowsable, Category("用户控件设置"),

        DefaultValue(defaultText),

        Personalizable(),

        FriendlyName("用户控件路径"), Description("请输入用户控件路径 (.ascx)")]

        public string UserControl

        {

            get { return _userControl; }

            set { _userControl = value; }

        }



        protected internal void LoadUserControl()

        {

            if (!string.IsNullOrEmpty(this._userControl))

            {

                this._control = (UserControl)Page.LoadControl(this._userControl);

                this.Controls.Add(this._control);

            }

            else

            {

                this._child = new LiteralControl(string.Format("Web 部件未绑定用户控件。请 <a href=/"javascript:MSOTlPn_ShowToolPaneWrapper('{0}','{1}','{2}');/">打开工具窗格</a> 设置用户控件 URL。例如“~/_CONTROLTEMPLATES/Welcome.ascx”)", 1, 129, this.ID));

                this.Controls.Add(this._child);

            }

        }



        protected override void CreateChildControls()

        {

            base.CreateChildControls();

            this.Controls.Clear();

            try

            {

                LoadUserControl();

            }

            catch (System.Exception ex)

            {

                this._child = new LiteralControl(string.Format("<b>错误:</b> 不能载入 {0}<br /><b>详细信息:</b> {1}", _userControl, ex.Message));

                this.Controls.Add(this._child);

            }

        }



        protected override void Render(HtmlTextWriter writer)

        {

            EnsureChildControls();

            if (_control != null)

            {

                _control.RenderControl(writer);

            }

            else

            {

                _child.RenderControl(writer);

            }

        }

    }

}

 

 效果如下:
一个最基本的框架,陆续增加功能. 请参看: 自定义用户控件的WebPart (二) 为WebPart设置自定义的TollPane PS:下面是我总结的一些东西,没有什么营养。 1、WebPart的自定义属性 * 声明WebPart自定义属性区别 System.Web.UI.WebControls.WebParts.WebPart

 

[WebBrowsable, Category( " Miscellaneous " ),         DefaultValue(defaultText),         Personalizable(),         FriendlyName( " Text " ), Description( " Text Property " )]

 

  Microsoft.SharePoint.WebPartPages.WebPart

[Browsable( true ),Category( " Miscellaneous " ),         DefaultValue(defaultText),         WebPartStorage(Storage.Personal),         FriendlyName( " Text " ),Description( " Text Property " )]

 

 * 在ToolPane中显示形式 String -> rendered as a TextBox 

 

private  string  _textField; [WebBrowsable( true ), Personalizable( true )] public  string  TextField {         get return this._textField; }         set this._textField = value; } }

 

 Boolean -> rendered as a CheckBox

 

private  bool  _boolField; [WebBrowsable( true ), Personalizable( true )] public  bool  BoolField {         get return this._boolField; }         set this._boolField = value; } }

 

 Enumerators -> rendered as a ComboBox 

 

public  enum  Days {        Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday  }   private  Days _enumField; [WebBrowsable( true ), Personalizable( true )] public  Days EnumField {         get return this._enumField; }         set this._enumField = value; } }

 

来自于:http://www.cnblogs.com/windbell/archive/2008/06/06/1215113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值