果园 MediaPickerField 到 MediaLibraryPickerField

Orchard MediaPickerField to MediaLibraryPickerField

我目前正在尝试将网站从 Orchard 1.6 更新到 1.8。 运行 在媒体 -> 媒体库步骤中解决一些问题。

我们的 Migrations.cs

中有这个
SchemaBuilder.CreateTable(typeof(CarouselRecord).Name, table => table
                .ContentPartRecord()
                .Column<string>("Interval", column => column.WithDefault(""))
                .Column<string>("MinHeight", column => column.WithDefault(""))
            );

            ContentDefinitionManager.AlterPartDefinition(
            typeof(CarouselPart).Name, cfg => cfg
                .WithField("CarouselImage1", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img1"))
                .WithField("CarouselImage2", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img2"))
                .WithField("CarouselImage3", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img3"))
                .WithField("CarouselImage4", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img4"))
                .Attachable()
            );

            ContentDefinitionManager.AlterTypeDefinition("CarouselWidget", cfg => cfg
                .WithPart(typeof(CarouselPart).Name)
                .WithPart("WidgetPart")
                .WithPart(typeof(CommonPart).Name)
                .WithSetting("Stereotype", "Widget")
            );

在禁用媒体模块并启用媒体库模块(并迁移媒体文件和媒体选择器字段)后,它完全停止工作,在 .cshtml 中的这一行崩溃:

<div class="item"><a href="@Model.ContentPart.CarouselImage2.AlternateText"><img src="@(Href(Model.ContentPart.CarouselImage2.Url))" alt="" /></a></div>

首先,我尝试更新模板以改为使用 MediaLibraryPickerFields,但没有成功。 原来,当我转到管理 -> 小部件 -> 编辑小部件时,小部件的媒体字段消失了。

是我在更新过程中做错了什么,还是我必须在 Migrations.cs 中编写新的更新以删除 MediaPickerFields 并改为添加 MediaLibraryPickerFields?

3 个月没有回复,我以为我会关闭它。 我最终做的是删除 MediaPickerFields

ContentDefinitionManager.AlterPartDefinition(
            typeof(CarouselPart).Name, cfg => cfg
               .RemoveField("CarouselImage1")
               .RemoveField("CarouselImage2")
               .RemoveField("CarouselImage3")
               .RemoveField("CarouselImage4")
                .Attachable()
            );

然后改为添加 MediaLibraryPickerField

        ContentDefinitionManager.AlterPartDefinition(
        typeof(CarouselPart).Name, cfg => cfg
            .WithField("CarouselImages", fieldBuilder => fieldBuilder.OfType("MediaLibraryPickerField").WithDisplayName("Images").WithSetting("MediaLibraryPickerFieldSettings.Multiple", "true"))
            .Attachable()
        );

由于数据丢失,不是最佳选择,但在这种情况下这不是什么大问题。