1

我有一个 Web API 服务,我已经设法ContentPart通过使用此处概述的方法将值提取到 a 中:如何更改 Orchard 记录存储库

现在,我要做的是更新我的属性值,ContentPart并通过 Web API 调用执行更新。我想我已经接近了,但只是无法触发更新方法。

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

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

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

4

1 回答 1

1

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

我不太明白您所说的“通过 a访问ContentPartController”是什么意思?

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

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

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

  1. 用作LazyField<T>更新后需要推送到 Web 服务的那些部件属性的支持字段。
  2. 将调用 Web 服务的代码放在该惰性字段的设置器中(在处理程序OnActivated事件期间设置它)。
  3. 现在,每当您的属性更新时,都会调用网络服务,即。惰性字段将充当您的 Web 服务和当前代码之间的透明代理。

有关如何使用惰性字段的示例,请查看CommonPartHandler类和方法LazyLoadHandlers以及PropertySetHandlers.

于 2013-04-14T00:33:25.487 回答