2012-05-07 10 views
1

私はOrchard 1.4でKevin KueblerのPluralsightチュートリアルに従ってカスタムモジュールを構築しています。必要な場所にすべてがあると思いますが、モジュールを有効にして新しいアーティクル(カスタムコンテンツタイプ)を追加しようとすると、カスタムコンテンツパートのフィールドが表示されません。私はチュートリアルに続いて何度も最初から再構築しましたが、この同じ場所で立ち往生し続けています。私は答えを求めてグーグルで見つけましたが、私が見ていることから、私は必要な場所にすべてを持っています。以下は私のコードです。カスタムオーチャードCMS 1.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)); 
     } 
    } 
} 

ビュー\ EditorTemplates \パーツ\ 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、私は記事を追加/編集するときにフィールドが表示されないだけです。

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

+0

明らかに間違っているようです。次のステップは、おそらくドライバーにブレークポイントを設定し、ヒットしたかどうかを確認することです。 –

答えて

1

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

+0

ありがとうKevin、それはそれがまさにそれだった。私はパブリック修飾子をドライバクラスに追加しました。それは魅力のように機能します。 BTW、Pluralsightの素晴らしいチュートリアル、非常に簡単に従うと有益。 –

+0

それはすべてそれが聞こえて嬉しい、嬉しいです。 Pluralsightコースにコメントしてくれてありがとう!それが役に立つと聞いてうれしいです。 –

関連する問題