这看起来像一个简单的问题,但在尝试了几个小时之后我无法弄清楚。对于我的自定义页面类型,我有一个名为" Location"的字段,它显示带有位置名称的复选框列表。我检查了多个方框,但是使用了Eval("位置"),显示如下:1 | 3 | 6,但不是旧金山,圣何塞,弗雷斯诺。谢谢你的帮助!
PS:我搜索并遇到了this old post dated 2011。我不确定如何实现API选项,并且javascript选项不好,因为我的列表是动态且长的。考虑到我现在使用的是Kentico 9而在2016年,而不是2011年,还不确定是否有不同的实现方式:d
答案 0 :(得分:1)
看起来你所拥有的“位置”字段不是存储显示名称值,而是存储其他一些值,例如ID指向其他数据库表 - 这实际上是一件好事,但检索那些是真的价值可能会有点困难。
没有任何开箱即用的方法可以将这个ID列表(1 | 3 | 6 ...)“转换”为实际值。
您实际上需要创建自己的Transformation method,它可以获取您的位置字段的值,并使用C#和相应的提供商将其转换为实际值(取决于您的数据存储位置)。
如果您可以提供有关数据存储精确程度和位置的更多信息,我可以为您提供一些代码示例。
答案 1 :(得分:1)
在这种情况下我通常做的事情(如果它是一次性设置)是在转换中创建一个函数。如果需要在其他地方使用它,请为其创建自定义方法并通过宏或转换方法公开它。
您可以在转换中添加类似的内容(假设您的位置位于自定义表格中):
def manipulate_data(data):
if not isinstance(data, list):
return 'Only lists allowed'
count = 0
sum1 = 0
new_list = []
for x in data:
if x > 0:
count += 1
if x < 0:
sum1 += x
new_list.append(count)
new_list.append(sum1)
return new_list
import unittest
class ManipulateDataTestCases(unittest.TestCase):
def test_only_lists_allowed(self):
result = manipulate_data({})
# print('result: ', result)
self.assertEqual(result, 'Only lists allowed', msg='Invalid argument')
if __name__ == '__main__':
unittest.main()
然后像这样使用它:
<script runat="server">
public string GetLocations()
{
string returnValue = "";
string[] locations = Eval<string>("Location").Split('|');
foreach (string s in locations)
{
var item = CMS.CustomTables.CustomTableItemProvider.GetItem(ValidationHelper.GetInteger(s, -1), "your.CustomTable");
if (item != null)
{
returnValue += string.Format("<p>{0}</p>", item.GetValue("LocationName"));
}
}
return returnValue;
}
答案 2 :(得分:1)
您是否可以将数字更改为表单中的位置名称?例如
San Francisco;San Francisco
San Jose;San Jose
Fresno;Fresno
然后在你的转型中你可以做到
<% Eval("Location").ToString().Replace("|",", ") %>
如果您无法更改数字并且您愿意编写自定义内容,我会详细说明如何获取list of options in this post。