【问题标题】:How to update node properties from a page in Umbraco 7 using razor如何使用剃刀从 Umbraco 7 中的页面更新节点属性
【发布时间】:2016-06-02 01:47:28
【问题描述】:

我一直在寻找解决此问题的方法,但找不到适用于版本 7 的任何内容。

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

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

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

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

问候, 达米安·霍利

【问题讨论】:

    标签: razor umbraco7


    【解决方案1】:

    假设您的 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 将始终访问数据库,这与查询 API(IPublishedContentDynamicPublishedContent)不同。

    编辑:我刚刚注意到Jannik's answer 中的 cmets 或多或少提供了相同的答案。

    【讨论】:

    • 干杯,感谢您的帮助
    【解决方案2】:

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

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

    【讨论】:

    • 抱歉,我是 Umbraco 的菜鸟,哪一部分专门处理更新项目上的变量“deadlineDate”?我在链接页面上发现了一些处理发布对象的内容,但没有更新。
    • 如果您有 Content 对象 (our.umbraco.org/documentation/Reference/Management/Models/…),您可以更新 item.SetValue("deadlineDate", DateTime.Whatever) 等属性,然后使用 ContentService 保存和发布。
    • 使用 contentservice 更新属性看起来像这样(未经测试): var contentService = Services.ContentService; var content = contentService.GetById(item.Id); content.SetValue(deadlineDate, item.deadlineDate.AddYears(1)); contentService.SaveAndPublishWithStatus(content);
    • 是的,如果 item 还不是 Content 对象,则类似。另外, SetValue("deadlineDate", ...)
    • 大家好,感谢您的回答
    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2015-04-02
    • 2019-06-18
    • 2022-01-18
    • 2019-05-16
    相关资源
    最近更新 更多