【问题标题】:Custom Orchard CMS 1.4 Module Editor Shape Not Rendering自定义 Orchard CMS 1.4 模块编辑器形状未呈现
【发布时间】:2012-05-07 16:54:32
【问题描述】:

我正在按照 Kevin Kuebler 的 Pluralsight 教程在 Orchard 1.4 中构建一个自定义模块。我相信我拥有所需的一切,但是当我启用我的模块并尝试添加新文章(我的自定义内容类型)时,我没有看到我的自定义内容部分的字段。我按照教程从头开始重建了很多次,但一直卡在同一个地方。我已经用谷歌搜索了答案,但从我所看到的情况来看,我已经准备好了我需要的一切。以下是我的代码片段。

迁移.cs

using Orchard.Core.Contents.Extensions;
using Orchard.Data.Migration;
using Orchard.ContentManagement.MetaData;

    namespace Northern.Articles {
    public class Migrations : DataMigrationImpl {

        public int Create() {

            ContentDefinitionManager.AlterTypeDefinition("Article", builder =>
                builder.WithPart("CommonPart")
                .WithPart("TitlePart")
                .WithPart("AutoroutePart")
                .WithPart("BodyPart", partBuilder =>
                    partBuilder.WithSetting("BodyTypePartSettings.Flavor","Text")
                    )
                .Creatable()
                .Draftable()
                );

            return 1;
        }

        public int UpdateFrom1() {

            SchemaBuilder.CreateTable("ArticlePartRecord", table =>
                table.ContentPartRecord()
                .Column<int>("ArticleID")
                .Column<string>("PrimaryImage", col => col.WithLength(300))
                .Column<string>("ThumbImage", col => col.WithLength(300))
                .Column<bool>("IsFeatured"));

            ContentDefinitionManager.AlterTypeDefinition("Article", builder =>
                builder.WithPart("ArticlePart"));

            return 2;
        }
    }
}

ArticlePartRecord.cs

using Orchard.ContentManagement.Records;
namespace Northern.Articles.Models
{
    public class ArticlePartRecord : ContentPartRecord
    {
        public virtual int ArticleID { get; set; }
        public virtual string PrimaryImage { get; set; }
        public virtual string ThumbImage { get; set; }        
        public virtual bool IsFeatured { get; set; }
    }
}

ArticlePart.cs

using Orchard.ContentManagement;

namespace Northern.Articles.Models
{
    public class ArticlePart : ContentPart<ArticlePartRecord>
    {
        public int ArticleID {
            get { return Record.ArticleID; }
            set { Record.ArticleID = value; }
        }
        public string PrimaryImage
        {
            get { return Record.PrimaryImage; }
            set { Record.PrimaryImage = value; }
        }
        public string ThumbImage
        {
            get { return Record.ThumbImage; }
            set { Record.ThumbImage = value; }
        }
        public bool IsFeatured
        {
            get { return Record.IsFeatured; }
            set { Record.IsFeatured = value; }
        }
    }
}

ArticlePartDriver.cs

using Orchard.ContentManagement.Drivers;
using Northern.Articles.Models;
using Orchard.ContentManagement;

namespace Northern.Articles.Drivers
{
    class ArticlePartDriver : ContentPartDriver<ArticlePart>
    {
        protected override string Prefix
        {
            get
            {
                return "Article";
            }
        }

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

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

ArticleHandler.cs

using Orchard.ContentManagement.Handlers;
using Orchard.Data;
using Northern.Articles.Models;

namespace Northern.Articles.Handler
{
    public class ArticleHandler : ContentHandler
    {
        public ArticleHandler(IRepository<ArticlePartRecord> articlePartRepository)
        {
            Filters.Add(StorageFilter.For(articlePartRepository));
        }
    }
}

视图\EditorTemplates\Parts\Article.cshtml

@model Northern.Articles.Models.ArticlePart

<fieldset>
    <legend>@T("Article Details")</legend>
    @Html.LabelFor(m => m.ArticleID, T("Article ID"))
    @Html.TextBoxFor(m => m.ArticleID)
    @Html.LabelFor(m => m.PrimaryImage, T("Primary Image"))
    @Html.TextBoxFor(m => m.PrimaryImage)
    @Html.LabelFor(m => m.ThumbImage, T("Thumbnail Image"))
    @Html.TextBoxFor(m => m.ThumbImage)
    @Html.LabelFor(m => m.IsFeatured, T("Is Featured"))
    @Html.CheckBoxFor(m => m.IsFeatured);
</fieldset> 

Placement.info

<?xml version="1.0" encoding="utf-8" ?>
<Placement>
  <Place Parts_Article_Edit="Content:10"/>
</Placement>

模块正确加载,表在数据库中创建,我只是在添加/编辑文章时看不到字段。

如果能看到我看不到的东西,我们将不胜感激。

【问题讨论】:

  • 对我来说似乎没有什么明显的错误。下一步可能是设置断点,例如在驱动程序中,看看它们是否被命中。

标签: asp.net-mvc-3 orchardcms


【解决方案1】:

在我看来,你已经准备好了一切。我在查看代码时注意到的一件事是您在 ArticlePartDriver 类上没有 public 访问修饰符。如果您不将它们指定为公共,则类在 C# 中默认是内部的。我的猜测是 Orchard 无法创建 Driver 类,因为它不是公开的。

【讨论】:

  • 谢谢凯文,原来是这样。我将 public 修饰符添加到驱动程序类中,它就像一个魅力。顺便说一句,关于 Pluralsight 的很棒的教程,非常易于理解且内容丰富。
  • 太好了,很高兴听到这一切。感谢您对 Pluralsight 课程的评论!我很高兴听到它很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多