c# - 在 Umbraco 6.x 中使用内容服务 api 更新属性

标签 c# umbraco

我为我的 Umbraco 站点的后端创建了一个自定义用户控件,允许管理员快速更新节点上的某些字段,而无需浏览内容树。

到目前为止,我的代码按预期工作:我可以毫无问题地更新简单的 true/false 属性。但是,现在我正在尝试更新自定义数据类型的属性,但遇到了困难。

数据类型本身只是一个简单的下拉列表,列出了一系列可用性状态,即。可用、不可用、已售出和保留。数据类型存储文本值。

这是我拥有的代码,可以让我更新我的 true/false 属性:

public void ChangeInteractiveStatus(string nodeId, bool chkValue)
{
    var cs = ApplicationContext.Current.Services.ContentService;
    var apartment = cs.GetById(Convert.ToInt32(nodeId));
    apartment.SetValue("displayOnInteractive", chkValue);
    cs.SaveAndPublish(apartment);
}

这非常有效,因为此属性的数据类型是常规的 true/false 数据类型。

这是我用来更改自定义下拉列表数据类型的值的代码:

public void ChangeAvailabilityStatus(string nodeId, string status)
{
    var cs = ApplicationContext.Current.Services.ContentService;
    var apartment = cs.GetById(Convert.ToInt32(nodeId));            
    apartment.SetValue("status", status);
    cs.SaveAndPublish(apartment);
}

如您所见,差别很小,但这段代码无法正常工作。

为了检查使用上述代码更新属性时发生了什么,我检查了 umbraco.config 文件,发现有问题的属性显示如下:

<status><![CDATA[]]></status>

然而,当我更改内容树中的值(不使用我的管理控件)时,该值被正确保存为:

<status><![CDATA[Sold]]></status>

因此,无论出于何种原因,当我尝试更新该值时,它都被拒绝了,我无法弄清楚原因。

仅供引用,我尝试将值输入为:

"<![CDATA[" + status + "]]>"

但这并没有什么不同。

有谁知道我该如何解决这个问题?如何让属性正确更新?

谢谢

最佳答案

好的,我已经知道问题出在哪里了。这些值似乎存储为名称-值对,因此存储在数据库中的实际值是一个整数。一旦我更新代码以插入整数 id,它就会按预期工作!万岁。

关于c# - 在 Umbraco 6.x 中使用内容服务 api 更新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900069/

相关文章:

c# - Entity Framework 模型中的集合未更新

c# - Umbraco 中的母版页

jquery - MVC Api Controller 与 JSON.stringify 的混淆

umbraco - 如何设置 umbraco 接受多个成员的同一电子邮件

c# - 带正则表达式的匹配表

C# : How to convert a local pdf file to a byte [][]

c# - Unity3d 中未处理的异常 : System. Reflection.ReflectionTypeLoadException

c# - 如何从 List.ForEach C# 进行异步调用

c# - 在 Umbraco XSLT 中使用自定义类文件

c# - Umbraco 7 - 如何从 IPublishedContent 获取发布日期?