无法使用ContentService的SaveAndPublish

时间:2019-06-03 06:27:37

标签: umbraco umbraco8

我正在尝试保存名为IContent的{​​{1}},但在这一行(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;

´ 有人可以指出这里有什么问题吗?

3 个答案:

答案 0 :(得分:4)

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

如果您在SurfaceController中,则可以这样获得ContentService:

var cs = Services.ContentService;

如果您所在的班级没有公开服务,则可以这样获得:

var cs = ApplicationContext.Current.Services.ContentService;

在下面的Umbracos文档中了解有关此内容的更多信息:)

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

答案 1 :(得分:3)

我发现,如果执行此操作,它将起作用。

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

}

答案 2 :(得分:0)

that link,似乎Umbraco的“保存”有效,即使某些内容为空但不是完全无效:

  

保存正在起作用,但并不完全,它正在将内容保存到数据库   但不包括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-