我为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 + "]]>"
然而这没有任何区别。
有谁知道如何解决这个问题?如何才能正确更新属性?
由于
答案 0 :(得分:3)
好的,我已经弄明白问题是什么了。似乎值存储为名称 - 值对,因此存储在数据库中的实际值是整数。一旦我更新了代码以插入整数id,它就按预期工作了!万岁。