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

Sli*_*och 3 razor umbraco7

我一直在寻找解决方案,但找不到版本7的任何东西.

我只需更新Umbraco 7节点上的日期属性.(不是发布日期)然后我需要告诉umbraco重新发布页面/更新缓存.

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

if(item.annual.ToString()=="True")
{
    item.deadlineDate = item.deadlineDate.AddYears(1);
}
Run Code Online (Sandbox Code Playgroud)

任何和所有建议都非常欢迎,

此致,Damien Holley

elo*_*los 8

假设您的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);
Run Code Online (Sandbox Code Playgroud)

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

最后,您需要注意在视图中使用Management API.由于前端用户操作,不仅可能丢失数据,而且ContentService与查询API(IPublishedContentDynamicPublishedContent)不同,它还会导致性能问题,因为它总是会影响数据库.

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


Jan*_*ker 5

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

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