Content management system Orchard CMS驱动程序&x27;s编辑器覆盖不触发

Content management system Orchard CMS驱动程序&x27;s编辑器覆盖不触发,content-management-system,orchardcms,Content Management System,Orchardcms,使用Orchard 1.7。 目标:是创建一个我们称之为页面过滤器的集合 为了创建多对多零件,我遵循了所描述的教程步骤 问题:我的驱动程序类中的编辑器覆盖从未被点击,并且返回一个空的创建页面,除了保存按钮外什么都没有 模型类: namespace MyLib.Orchard.HyperlinkItemManager.Models { public class HyperlinkPageFilterRecord { public virtual int Id { g

使用Orchard 1.7。

目标:是创建一个我们称之为页面过滤器的集合

为了创建多对多零件,我遵循了所描述的教程步骤

问题:我的驱动程序类中的编辑器覆盖从未被点击,并且返回一个空的创建页面,除了保存按钮外什么都没有

模型类:

namespace MyLib.Orchard.HyperlinkItemManager.Models
{
    public class HyperlinkPageFilterRecord
    {
        public virtual int Id { get; set; }
        public virtual int PageId { get; set; }
    }
}

namespace MyLib.Orchard.HyperlinkItemManager.Models
{
    public class HyperlinkPageFiltersContentRecord
    {
        public virtual int Id { get; set; }
        public virtual HyperlinkPageFiltersPartRecord HyperlinkPageFiltersPartRecord { get; set; }
        public virtual HyperlinkPageFilterRecord HyperlinkPageFilterRecord { get; set; }
    }

}
namespace MyLib.Orchard.HyperlinkItemManager.Models
{
    public class HyperlinkPageFiltersPart : ContentPart<HyperlinkPageFiltersPartRecord>
    {
        public IEnumerable<HyperlinkPageFilterRecord> HyperlinkPageFilters
        {
            get
            {
                return Record.HyperlinkPageFilters.Select(r => r.HyperlinkPageFilterRecord);
            }
        }
    }
}


namespace MyLib.Orchard.HyperlinkItemManager.Models
{
    public class HyperlinkPageFiltersPartRecord : ContentPartRecord
    {
        public virtual IList<HyperlinkPageFiltersContentRecord> HyperlinkPageFilters { get; set; }
        public HyperlinkPageFiltersPartRecord()
        {
            HyperlinkPageFilters = new List<HyperlinkPageFiltersContentRecord>();
        }
    }
}
名称空间MyLib.Orchard.HyperlinkItemManager.Models
{
公共类HyperlinkPageFilterRecord
{
公共虚拟整数Id{get;set;}
公共虚拟int PageId{get;set;}
}
}
命名空间MyLib.Orchard.HyperlinkItemManager.Models
{
公共类HyperlinkPageFiltersContentRecord
{
公共虚拟整数Id{get;set;}
公共虚拟HyperlinkPageFiltersPartRecord HyperlinkPageFiltersPartRecord{get;set;}
公共虚拟HyperlinkPageFilterRecord HyperlinkPageFilterRecord{get;set;}
}
}
命名空间MyLib.Orchard.HyperlinkItemManager.Models
{
公共类HyperlinkPageFiltersPart:ContentPart
{
公共IEnumerable HyperlinkPageFilters
{
得到
{
返回记录.HyperlinkPageFilters.Select(r=>r.HyperlinkPageFilterRecord);
}
}
}
}
命名空间MyLib.Orchard.HyperlinkItemManager.Models
{
公共类HyperlinkPageFiltersPartRecord:ContentPartRecord
{
公共虚拟IList HyperlinkPageFilters{get;set;}
公共HyperlinkPageFiltersPartRecord()
{
HyperlinkPageFilters=新列表();
}
}
}
查看模型类:

namespace MyLib.Orchard.HyperlinkItemManager.Models
{
    public class HyperlinkPageFiltersEditViewModel
    {
        public IList<HyperlinkPageFilterEntry> HyperlinkPageFilters { get; set; }
    }

    public class HyperlinkPageFilterEntry
    {
        public HyperlinkPageFilterRecord HyperlinkPageFilter { get; set; }
        public bool IsChecked { get; set; }
    }
}
名称空间MyLib.Orchard.HyperlinkItemManager.Models
{
公共类HyperlinkPageFiltersEditViewModel
{
公共IList HyperlinkPageFilters{get;set;}
}
公共类HyperlinkPageFilterEntry
{
公共HyperlinkPageFilterRecord HyperlinkPageFilter{get;set;}
已检查公共布尔值{get;set;}
}
}
服务:

   namespace MyLib.Orchard.HyperlinkItemManager.Services
    {
        public interface IHyperlinkPageFiltersService : IDependency
        {
            void UpdateHyperlinkPageFiltersForContentItem(
                ContentItem item,
                IEnumerable<HyperlinkPageFilterEntry> HyperlinkPageFilters);
            IEnumerable<HyperlinkPageFilterRecord> GetHyperlinkPageFilters();
        }

        public class HyperlinkPageFiltersService : IHyperlinkPageFiltersService
        {
            private readonly IRepository<HyperlinkPageFilterRecord>
                _HyperlinkPageFilterRepository;
            private readonly IRepository<HyperlinkPageFiltersContentRecord>
                _contentHyperlinkPageFiltersRepository;

            public HyperlinkPageFiltersService(
                IRepository<HyperlinkPageFilterRecord> HyperlinkPageFilterRepository,
                IRepository<HyperlinkPageFiltersContentRecord> contentHyperlinkPageFiltersRepository)
            {

                _HyperlinkPageFilterRepository = HyperlinkPageFilterRepository;
                _contentHyperlinkPageFiltersRepository = contentHyperlinkPageFiltersRepository;
            }

            public void UpdateHyperlinkPageFiltersForContentItem(
                ContentItem item,
                IEnumerable<HyperlinkPageFilterEntry> HyperlinkPageFilters)
            {

                var record = item.As<HyperlinkPageFiltersPart>().Record;
                var oldHyperlinkPageFilters = _contentHyperlinkPageFiltersRepository.Fetch(
                    r => r.HyperlinkPageFiltersPartRecord == record);
                var lookupNew = HyperlinkPageFilters
                    .Where(e => e.IsChecked)
                    .Select(e => e.HyperlinkPageFilter)
                    .ToDictionary(r => r, r => false);
                // Delete the rewards that are no longer there
                // and mark the ones that should stay
                foreach (var contentHyperlinkPageFiltersRecord in oldHyperlinkPageFilters)
                {
                    if (lookupNew.ContainsKey(
                        contentHyperlinkPageFiltersRecord.HyperlinkPageFilterRecord))
                    {

                        lookupNew[contentHyperlinkPageFiltersRecord.HyperlinkPageFilterRecord]
                            = true;
                    }
                    else
                    {
                        _contentHyperlinkPageFiltersRepository.Delete(contentHyperlinkPageFiltersRecord);
                    }
                }
                // Add the new rewards
                foreach (var HyperlinkPageFilter in lookupNew.Where(kvp => !kvp.Value)
                                               .Select(kvp => kvp.Key))
                {
                    _contentHyperlinkPageFiltersRepository.Create(new HyperlinkPageFiltersContentRecord
                    {
                        HyperlinkPageFiltersPartRecord = record,
                        HyperlinkPageFilterRecord = HyperlinkPageFilter
                    });
                }
            }

            public IEnumerable<HyperlinkPageFilterRecord> GetHyperlinkPageFilters()
            {
                return _HyperlinkPageFilterRepository.Table.ToList();
            }
名称空间MyLib.Orchard.HyperlinkItemManager.Services
{
公共接口IHyperlinkPageFiltersService:IDependency
{
无效更新HyperlinkPageFiltersforContentItem(
ContentItem项目,
i可数超链接页面过滤器);
IEnumerable GetHyperlinkPageFilters();
}
公共类HyperlinkPageFiltersService:IHyperlinkPageFiltersService
{
私有只读存储
_HyperlinkPageFilterRepository;
私有只读存储
_contentHyperlinkPageFiltersRepository;
公共超链接页面过滤器服务(
IRepository HyperlinkPageFilterRepository,
i存储内容HyperlinkPageFiltersRepository)
{
_HyperlinkPageFilterRepository=HyperlinkPageFilterRepository;
_contentHyperlinkPageFiltersRepository=contentHyperlinkPageFiltersRepository;
}
公共无效更新HyperlinkPageFiltersforContentItem(
ContentItem项目,
IEnumerable HyperlinkPageFilters)
{
var记录=项.As().record;
var oldHyperlinkPageFilters=\u contentHyperlinkPageFiltersRepository.Fetch(
r=>r.HyperlinkPageFiltersPartRecord==record);
var lookupNew=HyperlinkPageFilters
.其中(e=>e.IsChecked)
.选择(e=>e.HyperlinkPageFilter)
.ToDictionary(r=>r,r=>false);
//删除不再存在的奖励
//并标出应该留下的
foreach(旧HyperlinkPageFilters中的var contentHyperlinkPageFilters记录)
{
if(lookupNew.ContainsKey(
ContentHyperlinkPageFilterRecord.HyperlinkPageFilterRecord)
{
lookupNew[ContentHyperlinkPageFilterRecord.HyperlinkPageFilterRecord]
=正确;
}
其他的
{
_contentHyperlinkPageFiltersRepository.Delete(contentHyperlinkPageFiltersRecord);
}
}
//添加新的奖励
foreach(lookupNew.Where中的var HyperlinkPageFilter(kvp=>!kvp.Value)
.Select(kvp=>kvp.Key))
{
_contentHyperlinkPageFiltersRepository.Create(新建HyperlinkPageFiltersContentRecord
{
HyperlinkPageFiltersPartRecord=记录,
HyperlinkPageFilterRecord=HyperlinkPageFilter
});
}
}
公共IEnumerable GetHyperlinkPageFilters()
{
return _HyperlinkPageFilterRepository.Table.ToList();
}
迁移:

    public int UpdateFrom11()
    {
        SchemaBuilder.CreateTable("HyperlinkPageFiltersPartRecord",
        table => table
            .ContentPartRecord()
        );

        SchemaBuilder.CreateTable("HyperlinkPageFilterRecord",
        table => table
            .Column<int>("Id", column => column.PrimaryKey().Identity())
            .Column<int>("PageId")
        );

        SchemaBuilder.CreateTable("HyperlinkPageFiltersContentRecord",
            table => table
                .Column<int>("Id", column => column.PrimaryKey().Identity())
                .Column<int>("HyperlinkPageFiltersPartRecord_Id")
                .Column<int>("HyperlinkPageFilterRecord_Id")
            );
        return 12;
    }



    public int UpdateFrom12() {
        ContentDefinitionManager.AlterTypeDefinition("HyperlinkPageFiltersPart", builder => builder
            .DisplayedAs("Hyperlink Page Filters")
            .WithPart("HyperlinkPageFiltersPart")
            );
        return 13;
    }
    public int UpdateFrom13()
    {
        ContentDefinitionManager.AlterPartDefinition(
            "HyperlinkPageFiltersPart",
            builder => builder.Attachable());
        return 14;
    }
    }
}
public int UpdateFrom11()
{
SchemaBuilder.CreateTable(“HyperlinkPageFiltersPartRecord”,
表=>表
.ContentPartRecord()
);
SchemaBuilder.CreateTable(“HyperlinkPageFilterRecord”,
表=>表
.Column(“Id”,Column=>Column.PrimaryKey().Identity())
.列(“页面ID”)
);
SchemaBuilder.CreateTable(“HyperlinkPageFiltersContentRecord”,
表=>表
.Column(“Id”,Column=>Column.PrimaryKey().Identity())
.列(“HyperlinkPageFiltersPartRecord\u Id”)
.列(“HyperlinkPageFilterRecord_Id”)
);
返回12;
}
public int UpdateFrom12(){
ContentDefinitionManager.AlterTypeDefinition(“HyperlinkPageFiltersPart”,生成器=>builder
.DisplayedAs(“超链接页面过滤器”)
W
namespace MyLib.Orchard.HyperlinkItemManager.Drivers
{
    [UsedImplicitly]
    public class HyperlinkPageFiltersPartDriver : ContentPartDriver<HyperlinkPageFiltersPart>
    {
        private readonly IHyperlinkPageFiltersService _hyperlinkPageFiltersService;
        private IContentManager _contentManager;

        //private const string TemplateName = "Parts/HyperlinkPageFilters";

        public HyperlinkPageFiltersPartDriver(IHyperlinkPageFiltersService hyperlinkPageFiltersService, IContentManager contentManager)
        {
            _hyperlinkPageFiltersService = hyperlinkPageFiltersService;
            _contentManager = contentManager;
        }

        protected override string Prefix
        {
            get { return "HyperlinkPageFilters"; }
        }

        protected override DriverResult Display(HyperlinkPageFiltersPart part,string displayType,dynamic shapeHelper)
        {

            return ContentShape("Parts_HyperlinkPageFilters", () => shapeHelper.Parts_HyperlinkPageFilters(
                                ContentPart: part,
                                HyperlinkPageFilters: part.HyperlinkPageFilters));
        }

        protected override DriverResult Editor(HyperlinkPageFiltersPart part, dynamic shapeHelper)
        {


            return ContentShape("Parts_HyperlinkPageFilters_Edit",
                    () => shapeHelper.EditorTemplate(
                        TemplateName: "Parts.HyperlinkPageFilters.Edit",
                        Model: BuildEditorViewModel(part),
                        Prefix: Prefix));
        }

        protected override DriverResult Editor(HyperlinkPageFiltersPart part, IUpdateModel updater, dynamic shapeHelper)
        {

            var model = new HyperlinkPageFiltersEditViewModel();
            updater.TryUpdateModel(model, Prefix, null, null);

            if (part.ContentItem.Id != 0)
            {
                _hyperlinkPageFiltersService.UpdateHyperlinkPageFiltersForContentItem(
                    part.ContentItem, model.HyperlinkPageFilters);
            }

            return Editor(part, shapeHelper);
        }

        private HyperlinkPageFiltersEditViewModel BuildEditorViewModel(HyperlinkPageFiltersPart part)
        {

            //get all pages
            var pages = _contentManager.Query("Pages");

            //get pagesfilters

            //check pages

            var itemRewards = part.HyperlinkPageFilters.ToLookup(r => r.Id);
            return new HyperlinkPageFiltersEditViewModel
            {
                HyperlinkPageFilters = _hyperlinkPageFiltersService.GetHyperlinkPageFilters().Select(
                    r => new HyperlinkPageFilterEntry
                    {
                        HyperlinkPageFilter = r,
                        IsChecked = itemRewards.Contains(r.Id)
                    }).ToList()
            };
        }
    }
}
namespace MyLib.Orchard.HyperlinkItemManager.Handlers {
    public class HyperlinkPageFiltersPartHandler : ContentHandler {
        public HyperlinkPageFiltersPartHandler(IRepository<HyperlinkPageFiltersPartRecord> repository) {
            Filters.Add(StorageFilter.For(repository));
        }
    }
}