0

Orchard で、1 つのフィールド (GUID) のみを含むカスタム フィールドを作成しました。そのため、コンテンツ タイプに追加されるたびに、「エディター」テンプレートに新しい GUID が表示されます。これは正常に機能しますが、コンテンツ タイプを含むフォームを送信すると、フォームは別の GUID で投稿されます。よく見ると、エディター (POST) のフィールドのドライバーがフィールドのビューモデルを更新していないことがわかりました。

デバッグするための提案やヒントはありますか?

ここに私のコードのいくつかの行があります

protected override DriverResult Display(
            ContentPart part, Fields.UniqueIDField field,
            string displayType, dynamic shapeHelper)
        {

            return ContentShape("Fields_String", // this is just a key in the Shape Table
                 GetDifferentiator(field, part),
                 () =>
                 {
                     var settings = field.PartFieldDefinition.Settings.GetModel<UniqueIdFieldSettings>();
                     var value = field.Id;


                     var viewModel = new UniqueIdFieldViewModel
                     {
                         Id = value
                     };

                     return shapeHelper.Fields_String( // this is the actual Shape which will be resolved (Fields/DateTime.cshtml)
                         Model: viewModel);
                 }
             );
        }

        protected override DriverResult Editor(ContentPart part,
                                               Fields.UniqueIDField field,
                                               dynamic shapeHelper)
        {

            var settings = field.PartFieldDefinition.Settings
                                .GetModel<UniqueIdFieldSettings>();
            var value = Guid.NewGuid().ToString();
            field.Id = value;

            var viewModel = new UniqueIdFieldViewModel
            {
                Id = value,
            };

            return ContentShape("Fields_String_Edit",
                () => shapeHelper.EditorTemplate(
                          TemplateName: TemplateName,
                          Model: viewModel,
                          Prefix: GetPrefix(field, part)));
        }

        protected override DriverResult Editor(ContentPart part,
                                               Fields.UniqueIDField field,
                                               IUpdateModel updater,
                                               dynamic shapeHelper)
        {

            var viewModel = new UniqueIdFieldViewModel();         
            if (updater.TryUpdateModel(viewModel,
                                       GetPrefix(field, part), null, null))
            {
                field.Id = viewModel.Id;
            }

            return Editor(part, field, shapeHelper);
        }
4

1 に答える 1

1

GET エディター メソッドで毎回値をリセットしています。これは、独自の実行の最後に POST エディター メソッドによって毎回呼び出されます。まだ値がない場合にのみ、新しい値に設定します。

于 2013-08-04T04:34:46.270 に答える