2011-08-10 5 views
2

オーチャード・モジュールdevelopment.iで新規です。データを保存しようとしたときにmodule.whenを作成します。 私はコンテンツタイプ「製品」を使用しますが、それはbelowsの方法で果樹園ContentCreateExtensionを行くオーチャード・コンテンツ・タイプがnull

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 ProductRecord:ContentPartRecord 
{ 
    public virtual string EmployeeName { get; set; } 

    public virtual string EmployeeFathersName { get; set; } 
    public virtual DateTime DOB { get; set; } 
    public virtual string Email { get; set; } 
    public virtual string Address { get; set; } 
    public virtual DateTime JoiningDate { get; set; } 
} 

public class ProductPart : ContentPart<ProductRecord> 
{ 
    /* 
    public int Id 
    { 
     get { return Record.Id; } 
     set{Record.Id = value;} 
    } 
    */ 

    [Required] 
    public string EmployeeName 
    { 
     get { return Record.EmployeeName; } 
     set { Record.EmployeeName = value; } 
    } 

    [Required] 
    public string EmployeeFathersName 
    { 
     get { return Record.EmployeeFathersName; } 
     set { Record.EmployeeFathersName = value; } 
    } 

    [Required] 
    public DateTime DOB 
    { 
     get { return Record.DOB; } 
     set { Record.DOB = value; } 
    } 
    [Required] 
    public string Email 
    { 
     get { return Record.Email; } 
     set { Record.Email = value; } 
    } 
    [Required] 
    public string Address 
    { 
     get { return Record.Address; } 
     set { Record.Address = value; } 
    } 
    [Required] 
    public DateTime JoiningDate 
    { 
     get { return Record.JoiningDate;} 
     set { Record.JoiningDate = value; } 
    } 

} 

モデル

にデータ

public ActionResult Create(FormCollection input) 
    { 
     var product = contentManager.New<ProductPart>("Product"); 
     product.EmployeeName = input["EmployeeName"]; 
     product.EmployeeFathersName = input["EmployeeFathersName"]; 
     product.DOB = Convert.ToDateTime(input["DOB"]); 
     product.Email = input["Email"]; 
     product.Address = input["Address"]; 
     product.JoiningDate = Convert.ToDateTime(input["JoiningDate"]); 

     if (!ModelState.IsValid) 
     { 
      return View(product); 
     } 

     contentManager.Create(product); 

     return RedirectToAction("Index"); 
    } 

保存私が使用してこのクラスを、このコードフォアを使用

ここでは、var部分はnullです。コンテンツ部分がnullであることを意味します。
助けてください....

答えて

4

あなたの移行クラスをセットアップしましたか?

すなわち

public class Migrations : DataMigrationImpl { 

    public int Create() { 
     SchemaBuilder.CreateTable("ProductRecord", 
      table => table 
       .ContentPartRecord() 
       .COLUMNS NEED TO BE SPECIFIED 
      ); 

     ContentDefinitionManager.AlterTypeDefinition("Forum", 
      cfg => cfg 
       .WithPart("ProductPart") 
       .WithPart("CommonPart") 
      ); 

はまた、あなたのセットアップリポジトリを持っていますか?ニコラスの答えに加えて

すなわち

public class ProductPartHandler : ContentHandler { 
    public ProductPartHandler(IRepository<ProductPartRecord> repository) { 
     Filters.Add(StorageFilter.For(repository)); 
    } 
4

、私はProductPart用のドライバが不足して、このようなエラーを引き起こす可能性があることを、言及したいと思います。少なくとも空のドライバが定義されていることを確認してください。

public class ProductPartDriver : ContentPartDriver<ProductPart> {} 
+0

これは私を数回燃えた。 –

2

同様の状況が発生したので、ハンドラクラスがpublicとして宣言されていることを確認してください。

関連する問題