Kentico - 转换以显示列表框或多项选择的文本值
Kentico - Transformations to display text value of List box or Multiple choice
这看起来是个简单的问题,但我试了几个小时还是没弄明白。对于我的自定义页面类型,我有一个名为 "Location" 的字段,它显示带有位置名称的复选框列表。我检查了多个框,但是使用 Eval("Location"),显示是这样的:1|3|6,但不是 San Francisco、San Jose、Fresno。感谢您的帮助!
PS: 我搜索了一下发现this old post dated 2011。我不确定如何实现 API 选项,并且 javascript 选项不好,因为我的列表是动态的而且很长。考虑到我现在使用 Kentico 9 并且在 2016 年而不是 2011 年,也不确定是否有不同的方法来实现这一点:d
您的 "Location" 字段似乎没有存储显示名称值,而是存储了一些其他值,例如指向其他数据库的 ID table - 这实际上是一个很好的选择事情,但检索这些值确实可能有点困难。
没有任何开箱即用的方法可以将此 ID 列表 (1|3|6...) "convert" 转换为实际值。
您实际上需要创建自己的 Transformation method,它可以使用您的 Location 字段的值并使用 C# 和适当的提供程序(取决于您的数据存储位置)将其转换为实际值。
如果您能提供更多关于您的数据存储方式和存储位置的信息,我或许可以为您提供一些代码示例。
在这种情况下(如果是一次性设置)我通常做的是在转换中创建一个函数。如果你需要在其他地方使用它,为它创建一个自定义方法并通过宏或转换方法暴露它。
您可以在转换中添加类似这样的内容(假设您的位置在自定义表中):
<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;
}
然后像这样使用它:
<h2>Locations:</h2>
<%# GetLocations() %>
您能否将表格中的数字更改为地点名称?例如
San Francisco;San Francisco
San Jose;San Jose
Fresno;Fresno
那么在你的转型中你可以做
<% Eval("Location").ToString().Replace("|",", ") %>
如果您不能更改数字并且愿意编写自定义内容,我详细说明了如何获得 list of options in this post。
这看起来是个简单的问题,但我试了几个小时还是没弄明白。对于我的自定义页面类型,我有一个名为 "Location" 的字段,它显示带有位置名称的复选框列表。我检查了多个框,但是使用 Eval("Location"),显示是这样的:1|3|6,但不是 San Francisco、San Jose、Fresno。感谢您的帮助!
PS: 我搜索了一下发现this old post dated 2011。我不确定如何实现 API 选项,并且 javascript 选项不好,因为我的列表是动态的而且很长。考虑到我现在使用 Kentico 9 并且在 2016 年而不是 2011 年,也不确定是否有不同的方法来实现这一点:d
您的 "Location" 字段似乎没有存储显示名称值,而是存储了一些其他值,例如指向其他数据库的 ID table - 这实际上是一个很好的选择事情,但检索这些值确实可能有点困难。
没有任何开箱即用的方法可以将此 ID 列表 (1|3|6...) "convert" 转换为实际值。
您实际上需要创建自己的 Transformation method,它可以使用您的 Location 字段的值并使用 C# 和适当的提供程序(取决于您的数据存储位置)将其转换为实际值。
如果您能提供更多关于您的数据存储方式和存储位置的信息,我或许可以为您提供一些代码示例。
在这种情况下(如果是一次性设置)我通常做的是在转换中创建一个函数。如果你需要在其他地方使用它,为它创建一个自定义方法并通过宏或转换方法暴露它。
您可以在转换中添加类似这样的内容(假设您的位置在自定义表中):
<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;
}
然后像这样使用它:
<h2>Locations:</h2>
<%# GetLocations() %>
您能否将表格中的数字更改为地点名称?例如
San Francisco;San Francisco
San Jose;San Jose
Fresno;Fresno
那么在你的转型中你可以做
<% Eval("Location").ToString().Replace("|",", ") %>
如果您不能更改数字并且愿意编写自定义内容,我详细说明了如何获得 list of options in this post。