為列表型別繫結Event Receiver

2022-07-16 08:15:19 字數 4060 閱讀 6257

為列表型別繫結event receiver可以通過新增乙個feature, 並在feature中新增乙個receiver element來完成.

具體詳見sharepoint中的eventreceiver 之二 繫結event receiver到列表型別或列表例項.

要建立乙個event receiver, 你必須建立繼承自乙個特別的由wss object model的event receiver的基類. 還乙個很重要的地方需要注意的是, event receiver類必須在投入使用或測試之前, 編譯到強命名的程式集, 並被部署到gac中.

下面的例子中的類繼承自splisteventreceiver, 所以它可以處理基於列表的事件. 就像所有的event receiver類中一樣, 你通過重寫在基類裡定義的方法來建立event handler方法的實現.

using system;

using microsoft.sharepoint;

namespace litwaretypes

public override void fieldupdating(splisteventproperties properties)

public override void fielddeleting(splisteventproperties properties)

}}

這個vendorlisteventreceiver通過過載名字為fieldadding, fieldupdating, 和fielddeleting的三個方法提供了三個event handler. 因為所有這三個events都是在事件發生之前被處理的, 不管是那種原因引起事件的觸發, 這些event handlers都可以取消掉事件. 在這種情況下, 三個event handler使用splisteventproperties引數來賦予乙個錯誤資訊, 然後取消了事件.  在這些event handler被恰當地繫結到列表之後, 他們會阻止使用者(即使是有管理員許可權的使用者)向列表中新增, 修改, 或刪除任何乙個field.

現在讓我們來討論一下如何把event receiver類中的event handler與乙個列表型別繫結起來. 你可以通過在乙個feature中新增乙個receiver element來完成繫結. receivers element有乙個值為10001的listtemplateid 屬性, 它繫結receivers到自定義的列表型別的所有的例項上. 注意, 在receiver element之中, 每乙個event handler都有乙個獨立的receivers element. 你應該觀察到每乙個event handler方法都必須繫結到它自己的receiver element上, 因為沒有其他的方法能夠一次繫結多個event handler.

<

elements

xmlns

="">

<

receivers

listtemplateid

="10001" >

<

receiver

>

<

name

>field adding event

name

>

<

type

>fieldadding

type

>

<

assembly

>litwaretypes, [full 4-part assembly name goes here]

assembly

>

<

class

>litwaretypes.vendorlisteventreceiver

class

>

<

sequencenumber

>1000

sequencenumber

>

receiver

>

<

receiver

>

<

name

>field updating event

name

>

<

type

>fieldupdating

type

>

<

assembly

>litwaretypes, [full 4-part assembly name goes here]

assembly

>

<

class

>litwaretypes.vendorlisteventreceiver

class

>

<

sequencenumber

>1000

sequencenumber

>

receiver

>

<

receiver

>

<

name

>field deleting event

name

>

<

type

>fielddeleting

type

>

<

assembly

>litwaretypes, [full 4-part assembly name goes here]

assembly

>

<

class

>litwaretypes.vendorlisteventreceiver

class

>

<

sequencenumber

>1000

sequencenumber

>

receiver

>

receivers

>

elements

>

上面的通過receivers element來繫結event handler的技術有幾個值得注意的侷限性.

現在我們來討論一下如何繫結event handlers到乙個列表例項上, 而不是繫結到列表型別上. 下面的例子展現了使用wss object model來繫結vendorlistreceiver類的event handler到名為vendors的列表例項上. 這裡的**是寫在featureactived方法中的. 當你使用這種方式新增event handler的時候, 事件繫結的資訊會被寫入內容資料庫中, 就如同其他修改目標列表的自定義一樣.

public override void featureactivated(spfeaturereceiverproperties properties)

除了可以為列表型別新增event receiver以外, moss 2007還可以在如下的三種物件的例項上新增event receiver.

為他們新增event receiver可以通過sharepoint object model來完成, 核心**為以下的函式呼叫.

speventreceiverdefinitioncollection.add

新增的關鍵**片段如下:

if (node.tag is splist)

if (node.tag is spcontenttype)

if (node.tag is spweb)

移出的關鍵**如下:

treenode node = treeviewitems.selectednode;

speventreceiverdefinition er = (speventreceiverdefinition)node.tag;

if (messagebox.show("are you sure you want to remove this event handler?", "event handler explorer",

messageboxbuttons.yesno, messageboxicon.question) == dialogresult.yes)

{ er.delete();

下面的連線有介紹使用方法.

free tool: register event handlers programmatically (wss 2007)

MVC 中將列舉型別繫結到下拉列表

一 建立乙個如下的擴充套件方法 static selectlist toselectlist tenum this tenum enumobj return newselectlist values,id name enumobj 二 控制器裡 如下 其中postatus是枚 舉型別 public ...

MVC jQuery資料繫結 列表繫結(三)

除了繫結table外,還有其他的迴圈列表需要繫結。其實都一樣,都是把模版化成資料。模板的存法用注釋的方式只是一種方法。更好的方法自由發揮。目前就是為了取得模板。比如 用乙個json來存放需要的template,然後專門放在乙個templates.js裡或由xml配置的模板然後生成json資料,需要用...

C 列舉型別繫結下拉列表框

列舉的顯示名稱 global system.attributeusage attributetargets.field,inherited false,allowmultiple false public sealed class enumshownameattribute attribute 構造...