zoukankan      html  css  js  c++  java
  • WebPart 生存周期

    最近一段时间被WebPart 折腾得够厉害的,所以现在有很多必要记录一下犯错的经过。最重要是记录一下WebPart的生存周期,下面有部分的内容是转载的。

    了解一个WebPart的生存周期,对我们在开发Webpart时很有帮助,只有你清楚地了解了这些事件执行的先后顺序
    才能写出优美的代码。
    当一个包含WebPart的WSS站点页面被响应请求或者是它被提交到Server端的时候,这时WebPart生存周期开始了:

     

    OnInit

    初始化,加载相关配置文件 (如WebPart任务面板上的属性,样式等配置信息)

    LoadViewState

    返回先前最后一次被处理的状态 (如webpart是展现,隐藏还是关闭)

    CreateChildControls

    创建WebPart UI ,通过Controls.Add()方法装载Web 控件 (Note:当Webpart是第一次展现的时候CreateChildControls方法发生在OnLoad方法之前,而经过一次postback之后,它发生在OnLoad方法之后)

    OnLoad

    从数据库或者其他系统重新获取要展现的数据 (如获取数据库连接)

    PreRender

    在这个方法你可以输出HTML及注册JS、CSS文件

    Render

    将图形界面展现在页面上

    User-Generated Events

    响应用户生成事件 (如Button Click)

    RendenContents

    生成 html output,实现最终的UI展现 (由HTMLTextWriter class 来实现)

    SaveViewState

    保存控件状态 (ViewState 被序列化之后保存在一个hidden field 里)

    Dispose

    从内存中移除对象,释放临界资源 (如释放数据库连接)

    OnUnLoad

    最终完成内存清除工作

     

     一般来说我我们会在CreateChildControls 这个方法里面配置控件的属性,控件的绑定的方法,诸如Button的click, 还有Spgridview数据绑定的方法之类的,但是我们同时要把这个控件添加到父控件中,如this.Controls.Add(SPGridView1), 但对于需要布局来说非常之不好,很难控制其位置。如果直接输出可以用到this.Controls.Add(new LiteralControl("</div>")); 这种方法来输出HTML。

     但是有一点令人非常讨厌,如果你在这里输出的HTML绑定了一些变量及的值,那么你需要在之前就操作过一遍,然后CreateChildControls方法之后,其会操作Renderi 及PreRener 方法,然后再会执行其控件的数据源绑定,其在这个时候Webpart的所有属性的值都会变成成默认的, 如果你在你默认的方法中读取WebPart属性值的时候,那不是你原来WebPart设置的属性值。

    所以你会想到如果在RenderContent方法中生成HTML,output的时候,在这个方法呀添加 this.Controls.Add(SPGridView1),输出HTML的时候,你会发觉最后之前SPGridView1的绑定的方法GetDateTable在RenderContent方法执行后再执行其绑定。那就会很郁闷,其所有的值都会变成WebPart还没有设置属性值的默认值。最后,在这里输出的HTML就会没有效果。

    现在还没有好的方法来解决这个问题,只能先放到CreatChildControls然后其控件属性值绑定后再执行多一遍。

     

     

    先输静态HTML,再动态绑定数据,还有很多想不明白,先挖个坑。

     

  • 相关阅读:
    htop命令使用详解
    三月江南
    linux下文本三剑客之sed
    linux下五种查找命令
    Spring MVC 全局异常处理&文件上传
    About Spring MVC
    JSP
    java多线程
    Java中map接口 遍历map
    log4j
  • 原文地址:https://www.cnblogs.com/gzh4455/p/2305720.html
Copyright © 2011-2022 走看看