【问题标题】:In a C# TBB: how to split a multi SingleLineTextField into seperate strings在 C# TBB 中:如何将多单行文本字段拆分为单独的字符串
【发布时间】:2013-02-06 14:21:46
【问题描述】:

我在 Tridion 中有一个可以有多个值的纯文本字段。 itemtype 是 SingleLineTextField。

在 TBB 代码中,我有以下内容(删除了非必要部分):

ItemFields itemFields = new ItemFields(folder.Metadata, folder.MetadataSchema);

foreach (ItemField itemField in itemFields)
{
    string itemFieldValue = string.Empty;
    switch (Utilities.GetFieldType(itemField))
    {
        case FieldType.SingleLineTextField:
            itemFieldValue = itemField.ToString();
            break;
    }
}

现在如果有两个条目,结果只是两个字符串,其中包含一个字符换行符。

String A
String B

使用的方法是通用的,也适用于其他字段,所以我一直在寻找一些方法来确定 SingleLineTextField 中是否包含更多值。

【问题讨论】:

    标签: tridion tridion2009


    【解决方案1】:

    您可以将该字段转换为 SingleLineTextField 类型,然后遍历 Values 集合,如下所示:

    SingleLineTextField field = (SingleLineTextField)itemField;
    foreach(string value in field.Values)
    {
        // do something with value
    }
    // or if all you want is the count of values
    int i = field.Values.Count;
    

    【讨论】:

    • 有效!我出错的地方是没有将 Itemfield 专门转换为 SingleLineTextField。只有这样你才能得到“熟悉的”字段。值选项...
    【解决方案2】:

    首先,我建议不要依赖对象上的ToString() 方法,除非它被特别记录。在这种情况下,它适用于抽象类ItemField,但情况可能并非总是如此。

    TOM.Net API 仅定义 ItemField 的定义和名称属性,因此您需要将 ItemField 对象转换为更具体的对象。

    SingleLineTextField 继承自 TextField 抽象类,它定义了 ToString() 方法,还定义了 ValueValues 属性,它们更适合您正在尝试做的事情。查看文档,我们可以看到 Values 会给我们一个 IList<String> 的值,即使您的字段不是多值的。完美!

    因此,要回答您的问题,“我正在寻找某种方法来确定 SingleLineTextField 中是否包含更多值”,您需要将 ItemField 转换为 TextField 并检查它提供的值的数量,因此:

    TextField textField = (TextField)itemField;
    
    // If you need to deal with multi-valued fields separately
    if (textField.Values.Count > 1)
    {
        //Logic to deal with multiple values goes here
    }
    else
    {
        //Logic to deal with single valued goes here
    }
    
    // Much better... If you can deal with any number of values in a generic fashion
    foreach (string value in textField.Values)
    {
        // Generic code goes here
    }
    

    【讨论】:

    • 努诺在我打字时写下了他的答案。它们基本相同。我希望我的提供了一些额外的背景:)
    • 感谢@David,这是一些不错的附加信息,对可能遇到类似问题的其他人有用。这就是 SE 的全部意义所在!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多