【问题标题】:Get SharePoint ListItem's After and Before properties in Event Receiver在事件接收器中获取 SharePoint ListItem 的 After 和 Before 属性
【发布时间】:2021-06-03 16:36:58
【问题描述】:

所以我试图在我的 SharePoint 2010 列表中完成这种功能:

我的列表中有一个类型选择字段,它有 7 个值,我希望用户不能将该字段的值从值 2、3、4、5、6、7 更改为值 1。

我已经为该列表编写了一个事件接收器,这是我的代码:

public override void ItemUpdated(SPItemEventProperties properties)
   {
       base.ItemUpdated(properties);

       string beforeStatus = properties.BeforeProperties["Status"].ToString();
       string afterStatus = properties.AfterProperties["Status"].ToString();

       if (beforeStatus != "1stValue" && afterStatus == "1stValue")
       {
           properties.Cancel = true;
           properties.ErrorMessage = "This isn't allowed.";
       }
   }

我尝试同时使用ItemUpdatedItemUpdating 事件接收器,在调试时我看到事件接收器get 被调用,但beforeStatusafterStatus 正在从null两种情况下的项目。

那么,我怎样才能在正确更新之前和之后获取项目字段的值?提前致谢!

注意:字段的内部名称和显示名称都是Status

【问题讨论】:

    标签: c# sharepoint event-receiver


    【解决方案1】:

    使用 ItemUpdating 事件,然后 afterproperties 包含更改的值,ListItem 包含字段的原始值。

    Here您可以找到有关每个事件中可用属性的信息。

    如何编辑列表项也很重要。如果通过 SharePoint 默认编辑表单,所有列都存在于 afterproperties 集合中,但如果您从自定义代码(例如 webpart、事件接收)编辑项目,则该集合中仅存在更新的列。

    编辑:对于好看的错误,您可以将用户重定向到自定义错误页面(您必须创建)

    properties.Cancel = true;
    properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl; 
    properties.RedirectUrl = "/_layouts/MySolution/CustomErrorPage.aspx?Error=" + errorMessage;
    

    【讨论】:

    • 我在几分钟前找到了同一篇文章并解决了这个问题(见我的回答):D 还是谢谢你!
    • 有什么方法可以提醒用户一些消息并返回编辑表单而不保存? :)
    • 哦,还有一件事:如果用户编辑了其他一些字段,所以它也不会更新?那么我必须将properties.AfterProperties["Status"] = beforeStatus; 添加到我的代码中并且不取消任何内容?
    • 我认为没有办法返回编辑表单并查看更改的值。但是您可以创建自定义编辑(并添加一些 js 验证)或创建自定义保存按钮(这可能更适合您的情况)
    • 是的,您取消了所有属性的保存操作。就像我在之前的评论中所说的那样,自定义保存按钮将是您的最佳解决方案。
    【解决方案2】:

    我自己找到了解决方案:

    根据这个article,我发现如果我想同时获取旧值和新值,我必须使用ItemUpdating事件接收器并使用properties.ListItem获取旧值和properties.AfterProperties获得新的。

    虽然错误消息对用户来说看起来很糟糕:

    我现在会尝试解决这个问题:)

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      • 2018-09-07
      • 1970-01-01
      • 2012-03-17
      • 2012-12-11
      • 2021-06-30
      相关资源
      最近更新 更多