5

我正在尝试保存我的IContent被调用child,但在这一行(contentService.SaveAndPublish(child);)上我收到以下错误:Object reference not set to an instance of an object.

if (child.HasProperty("navn"))
{
    child.SetValue("navn", worker.Name.ToString(), "da-dk");
}
contentService.SaveAndPublish(child);

这就是我定义我的方式contentService
IContentService contentService = Umbraco.Core.Composing.Current.Services.ContentService;

我发现孩子是这样的:

long totalChildren;

IEnumerable<IContent> children = contentService.GetPagedChildren(filialsParent.Id, 0, 100, out totalChildren);

' 有人能指出这里有什么问题吗?

4

3 回答 3

4

我相信您以错误的方式获取 ContentService ,因此它可能为空,从而导致空引用异常。

如果你在 SurfaceController 中,你可以像这样获得 ContentService:

var cs = Services.ContentService;

如果你在一个没有暴露服务的类中,你可以像这样得到它:

var cs = ApplicationContext.Current.Services.ContentService;

在下面的 Umbracos 文档中阅读有关它的更多信息 :)

https://our.umbraco.com/documentation/Reference/Management/Services/ContentService/

于 2019-06-03T07:08:07.817 回答
4

我发现如果我这样做,那么它会起作用。

var umbf = Umbraco.Web.Composing.Current.Factory.GetInstance<IUmbracoContextFactory>();
using (var contextf = umbf.EnsureUmbracoContext())
{
    var umbcontext = contextf.UmbracoContext;
    IContentService cs = Umbraco.Core.Composing.Current.Services.ContentService;
    cs.SaveAndPublish(child);

}
于 2019-06-11T13:02:45.700 回答
0

那个链接,似乎 Umbraco 'Save' 工作,即使某些东西是空的但不完全:

保存工作但不完全,它将内容保存到数据库而不是 Umbraco 后台。甚至当我尝试将 setValues 包装在一个

if (blogNode.HasProperty("title")) {

我仍然收到空引用错误。

在 OP 案例中,他在第一步中采用了错误的 contentService,所以我认为@Mikkel 的回答并非完全错误:

原来我在这一行中使用了错误的 parentId:

var newBlog = contentService.CreateContent(post.Title, 1053, "umbNewsItem", 0);

正确的说法是:

var newBlog = contentService.CreateContent(post.Title, 1061, "umbNewsItem", 0);

L-

于 2019-06-11T08:10:20.553 回答