2

私はこれについて頭を悩ませることができません。

ContentTypeと呼ばれる場合Contacts。にContentTypeは 2 つのフィールドが関連付けられています。

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. すべてがOKで、コンテンツタイプがドラフト可能に設定されている場合は、アイテムを公開します。

この説明された例は、オーチャードトレーニングデモモジュール(ContentsAdminController.PersonListDashboardPost())で確認できます。

于 2013-03-17T00:51:51.790 に答える