这里的表单指的是列表默认的新建界面和编辑界面,在点击“确定”之后实际上是可以触发一段我们自定义的代码的,比如跳转页面、做一些其他操作等事情。(虽然跳转页面可以通过url中的Source来做,但是我们往往需要跳转时url加上当前列表条目的ID,不过新建页面中是拿不到条目ID的……)
添加表单事件的方法很容易,不过没有见到网上有任何文章说这件事 -.-
在SPFormContext中使用OnSaveHandler属性就可以挂载一个EventHandler了,所以我们可以在表单页面中加入如下代码(通过WebPart或者自定义字段):
通过Reflector,我们可以看到保存列表条目的那个确定按钮“SaveButton”在保存时所做的操作,如果当前表单中有SaveHandler的话,则不会自动保存该条目。换句话说,我们需要在代码里面自动做这件事,不过也很容易,利用SaveButton的静态方法SaveItem:
通过在自定义字段中使用,可以用这种方法实现一些功能(在自定义字段控件中可以直接用this.ControlMode代替FormMode)。
不过这种方法有一个缺陷,就是在默认的新建、编辑页面中虽然可以正常使用,但是在DataFormWebPart中(就是用SPD插入的“自定义列表表单”)中,SaveHandler无法被触发,而且当前的FormContext也有一些属性不正常(例如拿不到页面上的控件,FormMode是Invalid)……我还没有实验使用ListFormWebPart(就是原来那个表单WebPart)配合RenderTemplate的方式是不是能够行的通……
【http://blog.joycode.com/erucy/archives/2008/08/26/115237.joy】