我有一个像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吗?这是必要的,因为我之前遇到了安全错误。
我错过了什么?
答案 0 :(得分:1)
首先,它不是AllowUnsafeUpdates。这只是允许修改代码中的项目。
如果不了解更多应用程序的流程,就很难分辨出发生了什么。我建议虽然使用Modified By将项目关联到用户可能不是一个好主意。这意味着,正如您所发现的那样,系统或甚至可能是管理员的任何修改都会破坏该链接。
我会将当前用户存储在自定义字段中。这应该可以解决您的问题,并且是一种更安全的设计选择。
答案 1 :(得分:0)
可能会在事件接收器中运行一些其他代码并更新该项目。由于事件接收器在系统用户帐户的上下文中运行,并且如果您从事件接收器更新项目,则修改后的字段将仅显示:系统帐户已修改该项目。