我有一个名为culture的变量,其中包含所有文化代码的长列表,例如:
我想创建一个下拉列表,其中包含用这些代码填充的文本和值。
这是我到目前为止所提出的,但它不起作用,即我的下拉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;
}
}
}
为什么不使用Linq?
public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
{
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
return cultures.Select(x => new SelectItem() { Text = culturecode.ToString(), Value = culturecode });
}
我设法通过重写我的foreach循环来解决它,而不是包含以下内容:
foreach (var culturecode in cultures)
{
list.Add(new SelectItem()
{
Text = culturecode.ToString(),
Value = culturecode
});
}