Orchard Content Type为null

时间:2011-08-10 06:54:23

标签: orchardcms

我是orchard模块开发的新手。我创建了一个模块。当我尝试保存数据时。 我使用此代码保存数据

    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");
    }

我在Model

中使用的这个类
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; }
     }

}

我使用的内容类型为“Product”,但在下面的方法中使用果园ContentCreateExtension

   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;
    }

这里我面对var part为null意味着它的内容部分为null 请帮帮我....

3 个答案:

答案 0 :(得分: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));
    }

答案 1 :(得分:4)

除了尼古拉斯的回答,我想提一下,ProductPart缺少的驱动程序可能会导致此类错误。确保您至少定义了空驱动程序。

public class ProductPartDriver : ContentPartDriver<ProductPart> {}

答案 2 :(得分:2)

刚刚遇到类似情况,请确保处理程序类声明为public。