0

我的EventReceiverSharePoint应用程序中有一个要覆盖的方法ItemAddingItemUpdating方法:

public override void ItemAdding(SPItemEventProperties properties)
{
   SPWeb web = properties.OpenWeb();

   switch (properties.ListTitle)
   {
        //some cases

        case "Employees":
            if (properties.AfterProperties["User"] != null)
            {
               SPUser user = web.SiteUsers
               [
                   properties.AfterProperties["User"].ToString().Substring
                   (
                        properties.AfterProperties["User"].ToString().IndexOf(";#") + 2
                    )
               ];

               properties.AfterProperties["Title"] = user.Name;
            }
            break;
   }

   base.ItemAdding(properties);
}

两种方法中的代码完全相同。但有时 标题字段在将项目添加到列表后仍为空。如果我更新该项目(没有任何更改)标题字段由用户名正确填写。

4

1 回答 1

1

我在您的代码中看到两个潜在问题:

  1. 通过解析处理 properties.AfterProperties["User"]。最好使用这样的代码 (SPUserFieldValue)properties.ListItem.Fields["User"].GetFieldValue(properties.properties.AfterProperties["User"].ToString())。这种方式由 MSDN 建议。
  2. 在集合中找不到用户时,使用 SiteUsers 索引器会引发异常。你应该用 try ... catch 语句来包装它。当用户第一次在您的网站集中使用时,可能会发生这种情况。
于 2013-12-23T22:58:37.943 回答