我有一个自定义模块.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;
}
Run Code Online (Sandbox Code Playgroud)
这是我在控制器中的代码.
var newcontent = _orchardServices.ContentManager.New<MyModulePart>("MyModule");
...
_orchardServices.ContentManager.Create(newcontent);
Run Code Online (Sandbox Code Playgroud)
我从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;
}
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
谢谢.
这是处理程序.
public class MyModuleHandler : ContentHandler
{
public MyModuleHandler(IRepository<MyModuleRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
Run Code Online (Sandbox Code Playgroud)
你得到的是InvalidCastException因为内容项似乎没有你的MyModulePart附件.
如果你有一个驱动程序,那么在某个地方有一个隐含的链接,允许你的部分显示在一个内容项目上(我不知道这是怎么做的,也许其他人可以详细说明 - 但它是可以做的事情如何收获形状,并在Orchard核心深处的形状表中拾取.
但是,由于您没有驱动程序,因此ActivatingFilter在部件的处理程序类中添加一个 将明确显示链接:
public MyModulePartHandler : ContentHandler {
public MyModulePartHandler() {
Filters.Add(StorageFilter.For(repository));
Filters.Add(new ActivatingFilter<MyModulePart>("MyModule");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |