使用Umbraco 6.x中的Content Service API更新属性

时间:2013-09-19 16:21:24

标签: c# umbraco

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

到目前为止,我的代码按预期工作:我可以毫无问题地更新简单的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);
}

这非常正常,因为此属性的数据类型是常规的真/假数据类型。

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

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 + "]]>"

然而这没有任何区别。

有谁知道如何解决这个问题?如何才能正确更新属性?

由于

1 个答案:

答案 0 :(得分:3)

好的,我已经弄明白问题是什么了。似乎存储为名称 - 值对,因此存储在数据库中的实际值是整数。一旦我更新了代码以插入整数id,它就按预期工作了!万岁。