gpt4 book ai didi

orchardcms - 创建内容错误 - 指定的类型转换无效

转载 作者:行者123 更新时间:2023-12-05 00:00:26 26 4
gpt4 key购买 nike

我有一个自定义模块。 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;
}

这是我在 Controller 中的代码。
  var newcontent = _orchardServices.ContentManager.New<MyModulePart>("MyModule");
...
_orchardServices.ContentManager.Create(newcontent);

我从 Orchard.ContentManagement ContentCreateExtensions 中的这个新方法中得到了无效的转换错误。
    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");
}
}

关于orchardcms - 创建内容错误 - 指定的类型转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com