gpt4 book ai didi

c# - 自定义内容类型中的 MediaLibraryPickerField 不显示

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:29 25 4
gpt4 key购买 nike

我想以编程方式创建一个内容类型,其中包括图像等。执行此操作的明显方法似乎是使用 MediaLibraryPickerField

我的问题与this one 非常相似, 但不幸的是它没有给出答案

我的问题是无法显示该字段。我一直在研究文档和其他在线资源,但到目前为止还没有成功。我将在这里发布我所有的代码,希望有人能看到我遗漏了什么。我正在学习,所以如果我做任何奇怪的事情,请不要犹豫指出。

我的内容类型应该包括:

  • 职位
  • 正文
  • 描述
  • 图片

迁移.cs:

SchemaBuilder.CreateTable("MyTypePartRecord",
table => table
.ContentPartRecord()
.Column<string>("Description", c => c.Unlimited())
);

ContentDefinitionManager.AlterPartDefinition(
"MyTypePart", builder => builder
.WithDescription("Turns content types into a MyType.")
.WithField("Image", f => f.OfType(typeof(MediaLibraryPickerField).ToString()))
.Attachable()
);

ContentDefinitionManager.AlterTypeDefinition(
"MyType",cfg => cfg
.WithPart("CommonPart")
.WithPart("MyTypePart")
.WithPart("TitlePart")
.WithPart("BodyPart")
.Creatable()
);

模型/MyTypePart.cs:

public class MyTypePart : ContentPart<MyTypePartRecord>
{
public string Description
{
get { return Record.Description; }
set { Record.Description = value; }
}
}

模型/MyTypePartRecord.cs:

public class MyTypePartRecord : ContentPartRecord
{
[StringLengthMax]
public virtual string Description { get; set; }
}

模型/MyTypePartRecordHandler.cs:

public class MyTypePartRecordHandler : ContentHandler
{
public MyTypePartRecordHandler(IRepository<MyTypePartRecord> repository) {
Filters.Add(StorageFilter.For(repository));
}
}

Drivers/MyTypeDriver.cs

public class MyTypeDriver : ContentPartDriver<MyTypePart> {

public MyTypeDriver() {

}

// GET
protected override DriverResult Display(MyTypePart part, string displayType, dynamic shapeHelper) {
return ContentShape("Parts_MyType",
()=> shapeHelper.Parts_MyType(
Description: part.Description
));
}

// GET
protected override DriverResult Editor(MyTypePart part, dynamic shapeHelper)
{
return ContentShape("Parts_MyType_Edit",
() => shapeHelper.EditorTemplate(
TemplateName: "Parts/MyType",
Model: part,
Prefix: Prefix));
}

// POST
protected override DriverResult Editor(MyTypePart part, IUpdateModel updater, dynamic shapeHelper)
{
updater.TryUpdateModel(part, Prefix, null, null);
return Editor(part, shapeHelper);
}

}

Views/EditorTemplates/Parts/MyType.cshtml:

@model MySolution.Models.MyType

<fieldset>
<div class="editor-label">@T("Description"):</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.Description)
@Html.ValidationMessageFor(m => m.Description)
</div>
</fieldset>

View /部件/MyType.cshtml:

@using MySolution.Models

<div>Description: @Model.Description</div>

放置信息:

<Placement>
<Place Parts_MyType="Content:1"/>
<Place Parts_MyType_Edit="Content:7.5"/>
</Placement>

更新

按照建议,我在整个模块中将 MyTypePart 更改为 MyType。现在,在内容定义中,我直接在内容类型中看到 Image 字段,而不是内容类型的 MyTypePart 部分的字段。不过,我在创建新项目时仍然看不到该字段。

最佳答案

我终于知道哪里出了问题。而不是这个:

.WithField("Image", f => f.OfType(typeof(MediaLibraryPickerField).ToString()))

我应该这样做:

.WithField("Image", f => f.OfType("MediaLibraryPickerField"))

前者会导致 Orchard.MediaLibrary.Fields.MediaLibraryPickerField 类型的字段,而不仅仅是 MediaLibraryPickerField 并且显然 Orchard 不知道如何处理它。

关于c# - 自定义内容类型中的 MediaLibraryPickerField 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21601327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com