Orchard CMS使用Migrations.cs中定义的MediaPickerField

chr*_*sgo 5 orchardcms

MediaPickerFields仍然无法实现.

我在Migrations.cs中定义了一个新的部件,并在部件中添加了一个Boolean列和一个MediaPickerField如下:

SchemaBuilder.CreateTable("ImageContentPartRecord", table =>
            table.ContentPartRecord()
            .Column("DisplayImage", DbType.Boolean));

ContentDefinitionManager.AlterPartDefinition("ImageContentPart", builder =>
            builder
                .Attachable()
                .WithField("ImageField", fld =>
                    fld.OfType("MediaPickerField")
                    .WithDisplayName("Image")));
Run Code Online (Sandbox Code Playgroud)

假设我有ImageContentPartImageContentPartRecord类,如何在我的驱动程序和我的零件模板(编辑/显示)中从我的MediaPickerField(url,尺寸,替代文本,类等)中检索数据?

ie - Parts.ImageContent.cshtml(我想完成这样的事情):

<div>
     <img src="@Model.ImageField.Url" alt="@Model.ImageField.Alt" />
</div>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

chr*_*sgo 4

这是解决方案:

在我的显示驱动程序方法中,我确保在构建时传递我的ImageContentPart( ) :partContentShape

return ContentShape("Parts_ImageContent", () =>
            shapeHelper.Parts_ImageContent(
                Content: part));
Run Code Online (Sandbox Code Playgroud)

然后在我的模板视图中,我利用 Orchard 架构的动态特性来使用我的MediaPickerField. 为此,您需要访问.ContentItem零件上的属性,然后依靠动态,链接零件名称 ( .ImageContentPart),然后链接字段名称 ( .ImageContent) 以访问该字段。

@{
    // Attempting to access MediaPickerField named 'ImageContent'
    var image = Model.Content.ContentItem.ImageContentPart.ImageContent;

    // Leaning on Orchard dynamics to access properties of the field
    var url = image.Url;
}

<img src="@url" alt="@T(image.AlternateText)" />
Run Code Online (Sandbox Code Playgroud)

以下是 MediaPickerField 属性的详尽列表\\Orchard.Fields\Views\Fields\MediaPicker.cshtml

@* 
    Alternate Text: @Model.ContentField.AlternateText
    Class: @Model.ContentField.Class
    Style: @Model.ContentField.Style
    Alignment: @Model.ContentField.Alignment
    Width: @Model.ContentField.Width
    Height: @Model.ContentField.Height
    Url: @Model.ContentField.Url


    You can also display an image using this example, and add the attributes you need:
    <img src="@Href(Model.ContentField.Url)" />
*@
Run Code Online (Sandbox Code Playgroud)

希望如果您遇到类似的问题,这会对您有所帮助!