如何使用 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(IPublishedContent
或 DynamicPublishedContent
).
编辑:我刚刚注意到 中的评论或多或少提供了相同的答案。
我一直在四处寻找解决方案,但找不到版本 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(IPublishedContent
或 DynamicPublishedContent
).
编辑:我刚刚注意到