2

我无法理解这一点。

如果我有一个ContentTypeContacts. ContentType有两个附加到它的字段。

FirstName (textfield)LastName (textfield)

如果我想创建一个新contentitem的这种类型,那么我可以编写这样的代码。

dynamic contact = _services.ContentManager.New("Contacts");
contact.Contacts.FirstName.Value = "John";
contact.Contacts.LastName.Value = "Doe";
_services.ContentManager.Create(contact, VersionOptions.Published);

这不起作用。被Contentitem创建但字段为空。

但是,如果我这样写它就可以了。这是为什么?ContentManager.Create我必须在调用后设置字段值吗?

dynamic contact = _services.ContentManager.New("Contacts");
_services.ContentManager.Create(contact, VersionOptions.Published);
contact.Contacts.FirstName.Value = "John";
contact.Contacts.LastName.Value = "Doe";
4

1 回答 1

0

您观察到的确实是预期的行为,并且是设计使然。我以前也遇到过这个问题,也提出了一个问题。如您所见,它已被首席开发人员 Sebastien 关闭,他说这是设计使然,但遗憾的是没有解释原因。

仅供参考,管理内容项的标准工作流程如下:

  1. 实例化项目。
  2. 创造它。
  3. 更新其值。
  4. 如果更新是通过模型绑定器发生的,则检查 ModelState 是否有效。如果没有,请取消交易并返回。
  5. 如果一切正常并且内容类型设置为可草稿,请发布该项目。

您可以在Orchard 培训演示模块(ContentsAdminController.PersonListDashboardPost())中看到一个解释示例。

于 2013-03-17T00:51:51.790 回答