zoukankan      html  css  js  c++  java
  • SharePoint表单事件

    这里的表单指的是列表默认的新建界面和编辑界面,在点击“确定”之后实际上是可以触发一段我们自定义的代码的,比如跳转页面、做一些其他操作等事情。(虽然跳转页面可以通过url中的Source来做,但是我们往往需要跳转时url加上当前列表条目的ID,不过新建页面中是拿不到条目ID的……)

    添加表单事件的方法很容易,不过没有见到网上有任何文章说这件事 -.-

    在SPFormContext中使用OnSaveHandler属性就可以挂载一个EventHandler了,所以我们可以在表单页面中加入如下代码(通过WebPart或者自定义字段):

    1 protected override void OnInit(EventArgs e) 2 { 3 base.OnInit(e); 4 // add save handler 5 if (SPContext.Current.FormContext.FormMode == SPControlMode.New) 6 SPContext.Current.FormContext.OnSaveHandler += new EventHandler(MyHandler); 7 }

    通过Reflector,我们可以看到保存列表条目的那个确定按钮“SaveButton”在保存时所做的操作,如果当前表单中有SaveHandler的话,则不会自动保存该条目。换句话说,我们需要在代码里面自动做这件事,不过也很容易,利用SaveButton的静态方法SaveItem:

    1 protected void MyHandler(object sender, EventArgs e) 2 { 3 string checkInComment = Page.Request.QueryString["CheckInComment"]; 4 if (checkInComment == null) checkInComment = ""; 5 SaveButton.SaveItem(SPContext.Current, false, checkInComment); 6 7 // do custom actions, now we can get the item id! 8 if (SPContext.Current.FormContext.FormMode == SPControlMode.New) 9 Page.Redirect("some url.aspx?ID=" + SPContext.Current.ListItem.ID.ToString(), true); 10 }

    通过在自定义字段中使用,可以用这种方法实现一些功能(在自定义字段控件中可以直接用this.ControlMode代替FormMode)。

    不过这种方法有一个缺陷,就是在默认的新建、编辑页面中虽然可以正常使用,但是在DataFormWebPart中(就是用SPD插入的“自定义列表表单”)中,SaveHandler无法被触发,而且当前的FormContext也有一些属性不正常(例如拿不到页面上的控件,FormMode是Invalid)……我还没有实验使用ListFormWebPart(就是原来那个表单WebPart)配合RenderTemplate的方式是不是能够行的通……

  • 相关阅读:
    7.29 H5学习笔记
    8.1H5学习笔记
    8.4 H5知识点总结
    8.15 CSS知识点6
    8.12 CSS知识点5
    HTTP协议简析(二)
    php实现二分查找法
    http协议简析(一)
    telnet客户端模拟浏览器发送请求
    导入txt文件到SQL SERVER 2008
  • 原文地址:https://www.cnblogs.com/erucy/p/2416072.html
Copyright © 2011-2022 走看看