如何使用 razor 从 Umbraco 7 中的页面更新节点属性

How to update node properties from a page in Umbraco 7 using razor

我一直在四处寻找解决方案,但找不到版本 7 的任何内容。

我只需要在 Umbraco 7 节点上更新日期 属性。 (不是发布日期) 然后我需要告诉 umbraco 重新发布 page/update 缓存。

在下面的代码中,单个节点是 "item",如果它发现该项目的复选框 属性 设置为 true,那么它应该将日期增加 1 年。

if(item.annual.ToString()=="True")
{
    item.deadlineDate = item.deadlineDate.AddYears(1);
}

非常欢迎任何建议,

此致, 达米安·霍利

ContentService 是你的朋友:-) https://our.umbraco.org/documentation/Reference/Management/Services/ContentService

有了它,您既可以保存内容,也可以发布内容。

假设您的 item 变量是动态的,您首先需要将其 id 传递给管理 API 服务:

var contentService = ApplicationContext.Current.Services.ContentService;
var content = contentService.GetById(item.Id);
content.SetValue("deadlineDate", item.deadlineDate.AddYears(1));
contentService.SaveAndPublish(content);

这将保留该值并使其在应用程序的其他地方可用。它还将使用管理员用户的帐户进行更新,因此如果您希望审计跟踪显示其他内容,您需要使用将用户 ID 传递给 SaveAndPublish 方法。

最后,在视图中使用 Management API 时需要小心。不仅可能由于前端用户操作而丢失数据,而且还可能导致性能问题,因为 ContentService 将始终访问数据库,这与查询 APIs(IPublishedContentDynamicPublishedContent).

编辑:我刚刚注意到 中的评论或多或少提供了相同的答案。