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