我在 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);
}