我正在尝试在事件接收器中的ListItem上设置字段的值,但它不起作用
我在活动期间所做的一切都是
properties.AfterProperties[<field internal name>] = 1;
不会抛出任何错误,但我设置的字段不会更改。 我也试过
properties.ListItem[<field internal name>] = 1;
properties.ListItem.Update();
还尝试过SystemUpdate();
我知道我打算设置后续属性,但我认为我错过了一个明显的步骤。
由于
答案 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;
}
}