创建内容错误 - 指定的转换无效
我有一个自定义模块。 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));
}
}
你得到了InvalidCastException
因为内容项目不会出现让你的MyModulePart
连接。
如果你有一个驱动程序,那么在某个地方有一个隐含的链接,可以让你的部分显示在内容项上(我不确定这是如何完成的,也许有人可以详细说明 - 但它与Orchard核心内形状表的形状如何收集和拾取有关)。
但是因为你没有驱动程序,添加ActivatingFilter
你的部分的处理程序类将明确链接:
public MyModulePartHandler : ContentHandler {
public MyModulePartHandler() {
Filters.Add(StorageFilter.For(repository));
Filters.Add(new ActivatingFilter<MyModulePart>("MyModule");
}
}
谢谢。就是这样,它现在起作用了。 – user471317 2012-04-23 21:31:17
您的零件表名是错误的。试试看重命名这个(所以“记录”前的部分完全匹配你的部分型号名称):
SchemaBuilder.CreateTable("MyModulePartRecord", table => table
.ContentPartRecord()
...
);
我不确定这是否是问题。我有另一个模块,其中的表名与上面的格式相同,
您可以发布您的驱动程序/处理程序代码? – mdm 2012-04-22 11:08:47
没有司机。我用Handler代码更新了这篇文章。 – user471317 2012-04-23 14:47:13