我是果园里的新人。
要学习果园模块开发,我正在关注文档以尝试创建商业模块。
该模块由产品部件和产品类型组成,其中包含产品部件。
当我尝试使用以下方法保存数据时:
public ActionResult Create(FormCollection input)
{
var product = contentManager.New<ProductPart>("Product");
product.Description = input["Description"];
product.Sku = input["Sku"];
product.Price =Convert.ToDecimal(input["Price"]);
if (!ModelState.IsValid)
{
return View(product);
}
contentManager.Create(product);
return RedirectToAction("Index");
}
我收到一条错误,指出特定的广告素材无效且part(ContentPart)
为空。
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;
}
我使用了内容类型Product,我有ProductRecord类用于存储数据,如下所示:
public class ProductRecord:ContentPartRecord
{
// public virtual int Id { get; set; }
public virtual string Sku { get; set; }
public virtual string Description { get; set; }
public virtual decimal Price { get; set; }
}
public class ProductPart : ContentPart<ProductRecord>
{
/*
public int Id
{
get { return Record.Id; }
set{Record.Id = value;}
}
*/
[Required]
public string Sku
{
get { return Record.Sku; }
set { Record.Sku = value; }
}
[Required]
public string Description
{
get { return Record.Description; }
set{ Record.Description = value;}
}
[Required]
public decimal Price
{
get { return Record.Price; }
set { Record.Price = value; }
}
}
有谁能告诉我我的问题是什么?
答案 0 :(得分:2)
我只是在猜测,但您是否在migration.cs中声明了您的记录和ContentType?如果不这样做,内容管理将无法使用您的类型创建内容项,因为它不知道相关类型。
您的migration.cs看起来应该是这样的:
public class Migrations : DataMigrationImpl
{
public int Create()
{
SchemaBuilder.CreateTable("ProductRecord",
table =>
{
table.ContentPartRecord()
.Column<string>("Sku")
.Column<string>("Description")
.column<decimal>("Price");
});
ContentDefinitionManager.AlterTypeDefinition("Product", cfg => cfg.WithPart("ProductPart"));
return 1;
}
}
另一方面,Orchard中的命名约定是为部分XXXPartRecord命名记录。我不认为你的问题就在那里。
答案 1 :(得分:1)
您可以尝试使用pszmyd的命令行实用程序生成类似的部件,看看有什么不同。
http://www.szmyd.com.pl/blog/generating-orchard-content-parts-via-command-line
答案 2 :(得分:1)
我已经在你的其他帖子中提到了这个.. Orchard Content Type is null
你需要
迁移
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")
);
存储库
公共类ProductPartHandler:ContentHandler { public ProductPartHandler(IRepository repository){ Filters.Add(StorageFilter.For(储存库)); }
希望这有帮助