WebPart开发知识 (转)

Webpart的生命周期

  1. 当一个包含WebPart的WSS站点页面被响应请求或者是它被提交到Server端的时候,这时WebPart生存周期开始了
  2. OnInit 初始化,加载相关配置文件 (如WebPart任务面板上的属性,样式等配置信息) .
  3. LoadViewState 返回先前最后一次被处理的状态 (如webpart是展现,隐藏还是关闭)
  4. CreateChildControls 创建WebPart UI ,通过Controls.Add()方法装载Web 控件 (当Webpart是第一次展现的时候CreateChildControls方法发生在OnLoad方法之前,而经过一次postback之后,它发生在OnLoad方法之后)
  5. OnLoad 从数据库或者其他系统重新获取要展现的数据 (如获取数据库连接)
  6. User-Generated Events 响应用户生成事件 (如Button Click)
  7. RendenContents 生成 html output,实现最终的UI展现 (由HTMLTextWriter class 来实现)
  8. SaveViewState 保存控件状态 (ViewState 被序列化之后保存在一个hidden field 里)
  9. Dispose 从内存中移除对象,释放临界资源 (如释放数据库连接)
  10. OnUnLoad 最终完成内存清除工作

事件

OnInit 处理控件的初始化

OnLoad 处理控件的装载

CreateChildControls 创建子控件

EnsureChildControls 确保CreateChildControls方法被调用,使用该方法来确保在访问控件的数据之前控件已经存在。

OnPreRender 处理在呈现控件之前必须完成的任务,例如数据装载。异步页面任务应该从该方法中被启动。

Page.PreRenderComplete 在所有的控件都完成其OnPreRender 方法并且页面已经完成了异步任务的执行之后,将会触发该事件。

Render 呈现整个控件,包括外部标签。

RenderContents 仅仅呈现控件在外部标签和样式属性内的内容。

Asp.net风格的webpart

开发步骤

1.打开VS2008或者VS2010,点击新建项目,选择“类库”项目,输入项目名称如:WebParts

2.修改类名称,如修改成:HelloWorld.cs

3.引用System.web,添加命名空间,将HelloWorld类继承:

System.Web.UI.WebControls.WebParts.WebPart,然后重写方法:RenderContents。该方法是将内容输出到控件上的。如:

 

 

 

则部署之后,界面将显示“HellWorld!”。

这只是一个简单的webpart,如果想要写控件,然后加载数据,可以在CreateChildControls中编写控件,然后将控件放入,Controls.Add(…),如果要加载数据则在OnPreRender方法中绑定数据,最后在Render方法中呈现整个控件。点击生成,则开发完成。

部署

1.将项目bin下的dll拷贝到要部署的站点(如80)的bin目录下。

2.修改80站点下web.config,在修改之前切忌备份(养成良好习惯)。

  将该程序集添加为安全控件,添加内容如下:

Assembly:是程序集的名称

Namespace:程序集命名控件的名称。

TypeName=*:表示程序集中所有的类

Safe:是否安全控件

3.打开站点80,点击“网站设置”,以Sharepoint2010做示例。

4.选择库中的“we部件”,如:

5.你会看到很多webpart,如图:

这些都是页面上已经有的webpart,有系统自带的,有自己的。

.dwp的是WSS2.0下的。

.webpart的是WSS3.0及以上版本的。

6.点击“新建”项目,如:

找到刚刚我们添加的那个webpart,点击“导入库”,则webpart就会添加上。如:

7.到要添加该webpart的页面,点击“编辑页面”,选“插入”,找到“杂项”,就会看到刚刚添加的那个webpart,点击“添加”,则会在页面上看到。如:

完成了。。。很简单吧。。。

注:此例讲的是手工部署,是为了让读者更加明白部署的原理,还可以通过sharepoint模板建立项目,然后自动部署,其实最终的原理是一样的。

还需要说明的一点是,如果是自动部署,就一定要将dll放入GAC中(要放入GAC中的话,就一定要有强命名),放入GAC中有个好处就是可以这样的话,dll就可以被多个应用程序所用了。

原文地址:https://www.cnblogs.com/liubinurl/p/2471694.html