0

我在 Orchard 中创建了一个自定义字段,它只包含一个字段 (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 回答