如何在ItemUpdating事件期间更改字段值

时间:2010-06-17 21:44:00

标签: c# sharepoint events

我正在尝试在事件接收器中的ListItem上设置字段的值,但它不起作用

我在活动期间所做的一切都是

properties.AfterProperties[<field internal name>] = 1;

不会抛出任何错误,但我设置的字段不会更改。 我也试过

properties.ListItem[<field internal name>] = 1;
properties.ListItem.Update();

还尝试过SystemUpdate();

我知道我打算设置后续属性,但我认为我错过了一个明显的步骤。

由于

6 个答案:

答案 0 :(得分:11)

请注意,根据您的事件接收器是在列表或库上运行,您可能需要使用不同的属性(see this link for more info)。

假设您使用列表上运行的ItemUpdating方法,您只需要:

base.ItemUpdating(properties);
properties.AfterProperties["InternalName"] = 1;

(由于您在保存之前更改了值,因此无需更新)

我会验证您的事件接收器是否已附加到列表中。您是否可以在修改列表中的项目时调试事件接收器?

答案 1 :(得分:2)

顺便说一句,不要忘记调用DisableEventFiring,因为猜测调用Update方法会发生什么? ItemUpdated事件再次被调用,你进入无限循环......

答案 2 :(得分:1)

您可以使用以下方法在Item Adding事件中添加值  AfterProperties.ListItem [] =;

答案 3 :(得分:0)

ItemUpdating用于验证。如果要设置字段的值,请改为在ItemUpdated事件中执行。

答案 4 :(得分:0)

您也可以在ItemUpdating中更新字段的值,这对我有用。

  

properties.AfterProperties [“FieldName”] =“computedvalue”;
  base.EventFiringEnabled = false;   properties.ListItem.SystemUpdate(假);
  base.EventFiringEnabled = true;

答案 5 :(得分:0)

很高兴更新ItemAdding和ItemUpdating事件中的Title,因为避免了额外的更新(没有DisableEventFiring),并且“编辑属性视图”已经填充了标题

基于文件名更新标题的一些代码示例。适用于文档库和图片库。要使用列表中的标题,需要使用[“标题”]。

public override void ItemAdding(SPItemEventProperties properties)
{
    base.ItemAdding(properties);
    string currTitle = properties.AfterProperties["vti_title"] as string;
    string url = properties.AfterUrl;
    var name = url.Substring(url.LastIndexOf('/') + 1);
    //NOTE! Name is only copied to Title if title is not set. Will not handle name changes!
    if (string.IsNullOrEmpty(currTitle))
    {
        properties.AfterProperties["vti_title"] = name;
    }
}