我遇到了与此处描述的完全相同的问题。不幸的是,因为我没有 50 分,但我无法对此发表评论,所以我必须创建一个新的重复问题。
我的意思是它不像其他人的问题那样“100% 完全正确”,因为对我来说问题存在于编辑表单上,我正在使用自定义表单和字段的组合。但是我根据这个站点上的人提出的建议 #2 在字段级别添加自定义保存事件处理程序。我还应该注意,当我创建一个没有任何自定义表单或内容类型的新文档库并直接使用我的自定义字段时,事件处理程序也不会触发。但是,如果我创建一个新的常规 SharePoint 列表并添加自定义字段,则 OnSaveHandler可以火!所以我不太清楚为什么它在文档库中不起作用,但它在列表中起作用,因为我的印象是自定义字段的美妙之处在于它们独立于其他所有内容运行。意思是,即使我用我的编辑表单或其他控件做了一些不正常的事情,因为我将我的自定义方法附加到我的自定义字段的 OnInit 方法中的SPContext.Current.FormContext.OnSaveHandler那么无论如何都应该触发!即使是第一次加载该字段时,我实际上也看到调试器中连接了该事件。在调试模式下,我在下面的“if”语句旁边有一个断点,它会命中该断点,这意味着当触发 FormContext.OnSaveHandler 时,我的方法应该触发。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if ((SPContext.Current.FormContext.FormMode == SPControlMode.New) || (SPContext.Current.FormContext.FormMode == SPControlMode.Edit))
SPContext.Current.FormContext.OnSaveHandler += new EventHandler(MyHandler);
}
有什么想法吗?建议?
谢谢!
更新#1:经过一些故障排除后,我能够推断出我的自定义字段中的 EventHandler 被触发但仅在常规列表而不是文档库中使用时!在常规 SharePoint 列表中,不仅会触发 SPContext.Current.FormContext.OnSaveHandler,还会保存自定义字段中的值。
附带说明一下,当将数据保存回从 SPFieldText 继承的自定义字段时,该值(即 json 数据)在列表视图中显示为#VALUE!,我认为这有点奇怪。我的意思是它能够正确读取存储在字段中的 json 数据,因为它可以很好地显示在编辑表单中。但出于某种原因,SharePoint 只是将其显示为#VALUE!在列表视图中。