SharePoint列表项在item.update之后显示为由“系统帐户”编辑

时间:2012-06-08 19:50:21

标签: list sharepoint sharepoint-2007 postback

我有一个像SharePoint 2007上运行的应用程序的购物车。

我正在对列表项运行非常标准的更新过程:

            using (SPWeb web = site.OpenWeb())
            {
                web.AllowUnsafeUpdates = true;
                SPList list = web.Lists["Quotes"];
                SPListItem item = list.GetItemById(_id);
                item["Title"] = _quotename;
                item["RecipientName"] = _quotename;
                item["RecipientEmail"] = recipientemail;
                item["IsActive"] = true;
                item.Update();
                site.Dispose();
            }

此项目正确更新,但系统帐户会暂时显示为已修改。如果我等待一秒钟并刷新页面,它会再次显示为由CurrentUser修改。

这是一个问题,因为在Page_Load上我正在检索标记为Active的项目并且被CurrentUser列为Modified。这意味着当用户更新他的列表时,当PostBack结束时,它显示他没有活动项目。

是web.AllowUnsafeUpdates吗?这是必要的,因为我之前遇到了安全错误。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

首先,它不是AllowUnsafeUpdates。这只是允许修改代码中的项目。

如果不了解更多应用程序的流程,就很难分辨出发生了什么。我建议虽然使用Modified By将项目关联到用户可能不是一个好主意。这意味着,正如您所发现的那样,系统或甚至可能是管理员的任何修改都会破坏该链接。

我会将当前用户存储在自定义字段中。这应该可以解决您的问题,并且是一种更安全的设计选择。

答案 1 :(得分:0)

可能会在事件接收器中运行一些其他代码并更新该项目。由于事件接收器在系统用户帐户的上下文中运行,并且如果您从事件接收器更新项目,则修改后的字段将仅显示:系统帐户已修改该项目。