2012-04-21 31 views
4

我有一個自定義模塊。 Migrations.cs看起來像這樣。創建內容錯誤 - 指定的轉換無效

public int Create() 
    { 
     SchemaBuilder.CreateTable("MyModuleRecord", table => table 
      .ContentPartRecord() 
      ... 
     ); 

     ContentDefinitionManager.AlterPartDefinition(
      typeof(MyModulePart).Name, cfg => cfg.Attachable()); 

     ContentDefinitionManager.AlterTypeDefinition("MyModule", 
      cfg => cfg 
       .WithPart("MyModulePart") 
       .WithPart("CommonPart") 
       .Creatable() 
      ); 

     return 1; 
    } 

這是我在控制器中的代碼。

var newcontent = _orchardServices.ContentManager.New<MyModulePart>("MyModule"); 
    ... 
    _orchardServices.ContentManager.Create(newcontent); 

我從Orchard.ContentManagement ContentCreateExtensions中的這個New方法中得到無效的轉換錯誤。

public static T New<T>(this IContentManager manager, string contentType) where T : class, IContent { 
     var contentItem = manager.New(contentType); 
     if (contentItem == null) 
      return null; 

     var part = contentItem.Get<T>(); 
     if (part == null) 
      throw new InvalidCastException(); 

     return part; 
    } 

任何想法我做錯了什麼?

謝謝。

這是處理程序。

public class MyModuleHandler : ContentHandler 
{ 
    public MyModuleHandler(IRepository<MyModuleRecord> repository) 
    { 
     Filters.Add(StorageFilter.For(repository)); 
    } 
} 
+0

您可以發佈您的驅動程序/處理程序代碼? – mdm 2012-04-22 11:08:47

+0

沒有司機。我用Handler代碼更新了這篇文章。 – user471317 2012-04-23 14:47:13

回答

7

你得到了InvalidCastException因爲內容項目不會出現讓你的MyModulePart連接。

如果你有一個驅動程序,那麼在某個地方有一個隱含的鏈接,可以讓你的部分顯示在內容項上(我不確定這是如何完成的,也許有人可以詳細說明 - 但它與Orchard核心內形狀表的形狀如何收集和拾取有關)。

但是因爲你沒有驅動程序,添加ActivatingFilter你的部分的處理程序類將明確鏈接:

public MyModulePartHandler : ContentHandler { 
    public MyModulePartHandler() { 
     Filters.Add(StorageFilter.For(repository)); 
     Filters.Add(new ActivatingFilter<MyModulePart>("MyModule"); 
    } 
} 
+0

謝謝。就是這樣,它現在起作用了。 – user471317 2012-04-23 21:31:17

0

您的零件表名是錯誤的。試試看重命名這個(所以「記錄」前的部分完全匹配你的部分型號名稱):

SchemaBuilder.CreateTable("MyModulePartRecord", table => table 
     .ContentPartRecord() 
     ... 
    ); 
+0

我不確定這是否是問題。我有另一個模塊,其中的表名與上面的格式相同,記錄。該模塊工作正常。 – user471317 2012-04-23 14:46:39

相關問題