EPiServer: заполнить выборочный выпадающий список содержимым из массива? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть переменная под названием culture, которая содержит длинный список всех кодов культур, таких как:

  • EN-US
  • ан-ГБ
  • ан-AU
  • де-DE
  • и т.д.

Я хотел бы создать раскрывающийся список с текстом и значениями, заполненными этими кодами.

Это то, что я дошел до сих пор, но оно не работает, т.е. мой раскрывающийся список HrefLangName не содержит записей.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.DataAnnotations;
using EPiServer.Shell.ObjectEditing;

namespace Site.Models.Blocks
{
    [ContentType(GUID = "1ffec6b3-06a3-4fbd-b541-7d02e8302811")]
    public class HrefLangBlock : BlockData
    {

        [Display(Order = 1)]
        [SelectOne(SelectionFactoryType = typeof(HrefLangSelectionFactory))]
        public virtual string HrefLangName { get; set; }

        [Display(Order = 1)]
        public virtual string HrefLangLink { get; set; }

    }

    public class HrefLangSelectionFactory : ISelectionFactory
    {
        public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
        {

            CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

            var list = new List<ISelectItem>();

            foreach (var culturecode in cultures)
            {
                new SelectItem()
                {
                    Text = culturecode.ToString(),
                    Value = culturecode
                };
            }

            return list;
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 10 апреля 2019

Почему бы не использовать Linq?

public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
{
    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
    return cultures.Select(x => new SelectItem() { Text = culturecode.ToString(), Value = culturecode });
}
0 голосов
/ 10 апреля 2019

Мне удалось решить эту проблему, переписав мой цикл foreach, чтобы вместо него содержалось следующее:

foreach (var culturecode in cultures)
            {

                list.Add(new SelectItem()
                {
                    Text = culturecode.ToString(),
                    Value = culturecode
                });
            }
...