如何在更新Orchard中的内容部分后执行Web服务调用?

时间:2013-04-12 09:46:07

标签: asp.net .net asp.net-mvc web-services orchardcms

我有一个Web API服务,我已设法使用此处列出的方法将值提取到ContentPartHow to change Orchard record repository

现在,我想要做的是更新ContentPart上的属性值,并通过Web API调用执行更新。我认为我很接近,但是无法获得更新方法。

在我的Handler中,我为OnUpdate添加了一个处理程序。我可以看到我的OnUpdate方法已注册,但它永远不会执行。

所以我的问题是:这是正确的处理程序事件吗?如果是这样,我怎么能让它触发?

我应该补充一点,我通过ContentPart访问Controller,而不是Driver

1 个答案:

答案 0 :(得分:1)

每次拨打OnUpdating时,

OnUpdated / IContentManager.UpdateEditor(item)都会被解雇。在默认情况下,当您在编辑内容项时按“保存”按钮时会发生这种情况。

通过ContentPart ”访问Controller,我的意思并不明白?

您是否有自定义控制器来处理项目编辑器呈现并且它是回发? 或者您是否在代码中创建和更新某些项目,而根本不使用内置编辑器?

  • 在前一种情况下,您需要确保这一点 IContentEditor.UpdateEditor(item)会调用整个内容 POST操作中的项目(与默认情况下相同) 控制器 - Core\Contents\Controllers\AdminController.cs)。
  • 在后者中,我猜可能就是这种情况,OnUpdating / OnUpdated不会被解雇,您需要调用Web服务 正如Bertrand在评论中指出的那样,你自己来自控制器的行动。

还有第三种选择,我发现它在类似情况下特别有用:

  1. 使用LazyField<T>作为更新后推送到Web服务所需的部件属性的支持字段。
  2. 将调用Web服务的代码放在该惰性字段的setter中(在处理程序OnActivated事件期间进行设置)。
  3. 现在,每当您的财产更新时,都会调用Web服务,即。懒惰字段将在您的Web服务和当前代码之间充当透明代理。
  4. 有关如何使用惰性字段的示例,请查看CommonPartHandler类和方法LazyLoadHandlersPropertySetHandlers