Kentico - 转换以显示列表框或多项选择的文本值

时间:2016-09-15 18:44:26

标签: kentico

这看起来像一个简单的问题,但在尝试了几个小时之后我无法弄清楚。对于我的自定义页面类型,我有一个名为" Location"的字段,它显示带有位置名称的复选框列表。我检查了多个方框,但是使用了Eval("位置"),显示如下:1 | 3 | 6,但不是旧金山,圣何塞,弗雷斯诺。谢谢你的帮助!

PS:我搜索并遇到了this old post dated 2011。我不确定如何实现API选项,并且javascript选项不好,因为我的列表是动态且长的。考虑到我现在使用的是Kentico 9而在2016年,而不是2011年,还不确定是否有不同的实现方式:d

3 个答案:

答案 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