Umbraco 无法从ContentService使用SaveAndPublish

Umbraco 无法从ContentService使用SaveAndPublish,umbraco,umbraco8,Umbraco,Umbraco8,我试图保存名为child的IContent,但在这一行(contentService.SaveAndPublish(child);)上,我收到以下错误:对象引用未设置为对象的实例。 if (child.HasProperty("navn")) { child.SetValue("navn", worker.Name.ToString(), "da-dk"); } contentService.SaveAndPublish(child); 这就是我如何定义我的contentService

我试图保存名为
child的
IContent
,但在这一行(
contentService.SaveAndPublish(child);
)上,我收到以下错误:
对象引用未设置为对象的实例。

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);
var cs = Services.ContentService;
var cs = ApplicationContext.Current.Services.ContentService;
long-totalChildren;
IEnumerable children=contentService.GetPagedChildren(filialsParent.Id,0,100,out totalChildren);
`
有人能指出这里出了什么问题吗?

我认为您获取ContentService的方式不对,因此它可能是空的,从而导致空引用异常

如果您在SurfaceControl中,您可以获得如下内容服务:

long totalChildren;

IEnumerable<IContent> children = contentService.GetPagedChildren(filialsParent.Id, 0, 100, out totalChildren);
var cs = Services.ContentService;
var cs = ApplicationContext.Current.Services.ContentService;
如果您所在的类中没有公开服务,则可以这样获得:

long totalChildren;

IEnumerable<IContent> children = contentService.GetPagedChildren(filialsParent.Id, 0, 100, out totalChildren);
var cs = Services.ContentService;
var cs = ApplicationContext.Current.Services.ContentService;
请在下面的Umbracos文档中了解更多信息:)

看,看起来Umbraco的“保存”功能即使是空的,但并不完全有效:

Save正在工作,但不是完全工作,它正在将内容保存到db中 但不是去翁布拉科的后台办公室。甚至当我试着包装 设置内部的值

if(blogNode.HasProperty(“title”){

我仍然得到一个空引用 错误

在OP案例中,他在第一步使用了错误的contentService,因此我认为@Mikkel answer并非完全错误:

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

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

正确的说法是:

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


L-

我发现如果我这样做,它就会起作用

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);

}
var umbf=Umbraco.Web.Composing.Current.Factory.GetInstance();
使用(var contextf=umbf.EnsureUmbracoContext())
{
var umbcontext=contextf.UmbracoContext;
IContentService cs=Umbraco.Core.Composing.Current.Services.ContentService;
cs.保存和发布(儿童);
}

在C#和Umbraco 8中,找不到应用程序上下文。啊,我的错。使用依赖项注入方法怎么样?将ContentService注入控制器并将其传递到类库?我没有在任何控制器中使用此代码。此代码每小时都与Hangfire一起作为计划任务运行。啊。这是我最后的猜测,也许这能帮到你:谢谢,但我已经有了内容服务,它正在工作,只有SaveAndPublish()不工作…
.Save()
工作正常。尝试了以下操作-?可能有一个事件侦听器订阅发布时使用了一些代码,这些代码在数据保存后但在数据发布之前破坏了数据。即使这不是问题,您也可以为发布事件创建一个事件侦听器,看看您的数据是否达到了这样的程度。@Matt是的,确实如此我遵循的指南是,请注意,错误与Hangfire无关。我认为这可能是由于Umbraco.Core.Composing.Current为空。没有完成任何v8,但在7中,应用程序上下文将为空。@Matt谢谢你的评论,我还没有测试过它,但你知道如何修复它吗。Legion,我没有使用CreateContent,因为它已经被删除了ists.
child
来自
children
如果你看我的帖子,我的意思是,检查已经存在的上下文是否正确/不为空。因为这正是你的问题。Umbraco.Core.Composing.Current.Services.ContentService;可能为空,这就是问题所在。内容服务不是空的,我不能好的。我相信你的答案,明白了:)