1

Kevin KueblerのPluralsightチュートリアルに従って、Orchard1.4でカスタムモジュールを構築しています。必要なものはすべて揃っていると思いますが、モジュールを有効にして新しい記事(カスタムコンテンツタイプ)を追加しようとすると、カスタムコンテンツパーツのフィールドが表示されません。チュートリアルに従って何度もゼロから再構築しましたが、この同じ場所で立ち往生し続けています。私は答えをグーグルで検索しましたが、私が見ているものから、私は必要なものがすべて揃っています。以下は私のコードの一部です。

Migrations.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));
        }
    }
}

Views \ 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>

モジュールが正しくロードされ、テーブルがDBに作成されます。記事を追加/編集するときに、フィールドが表示されません。

私が見ることができないものを見る助けをいただければ幸いです。

4

1 に答える 1

1

あなたはすべてが整っているように私には見えます。コードを見て気付いたのは、ArticlePartDriverクラスにパブリックアクセス修飾子がないことです。クラスをパブリックとして指定しない場合、クラスはデフォルトでC#の内部にあります。Orchardは公開されていないため、Driverクラスを作成できないと思います。

于 2012-05-08T01:54:05.500 に答える