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

ali*_*c83 6 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,差别很小,但这段代码无效.

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

<status><![CDATA[]]></status>
Run Code Online (Sandbox Code Playgroud)

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

<status><![CDATA[Sold]]></status>
Run Code Online (Sandbox Code Playgroud)

所以无论出于何种原因,当我尝试更新它被拒绝的价值时,我无法解决原因.

仅供参考我尝试输入以下值:

"<![CDATA[" + status + "]]>"
Run Code Online (Sandbox Code Playgroud)

然而这没有任何区别.

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

谢谢

ali*_*c83 3

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