0

我有一个数据源给我一个IEnumerable<SelectListItem>每个 selectListItem 中的文本都是大写的。我想找到最简单的方法将它们更改为适当的大小写,而无需实际更改数据源。

4

2 回答 2

3

我认为最好的答案可能是在传递给您的视图之前将您的 Enumerable 转换为 SelectListItems ,然后将案例转换为 TitleCase 。一些假代码给你:

鉴于此数据源:

EnumerableItems = new List<string>() { "ITEM ONE", "ITEM TWO" };

我的 ViewModel 上有这个:

public string BoundValue { get; set; }
public IEnumerable<SelectListItem> SelectListItems { get; set; }

我像这样设置 SelectListItems:

viewModel.SelectListItems = from e in EnumerableItems
                            select new SelectListItem
                            {
                                Selected = e == dto.BoundValue,
                                Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(e.ToLower()),
                                Value = e
                            };

在我看来是这样的:

@Html.DropDownList("BoundValue", new SelectList(Model.SelectListItems, "Value", "Text"), "-- select --")

我明白了:

在此处输入图像描述

从理论上讲,我认为您也可以通过调用“Text”参数所在的 ToTileCase 来更改视图中的大小写,但我认为这样会不太干净。

编辑:我修改了创建 SelectListItem 的代码以使值保持大写(作为 e,而不是 e.ToTitleCase()) - 因为我猜它最终会绑定到您的原始数据源:)

于 2013-08-06T23:40:37.163 回答
0

好的,为了提供一点方向。如果您拥有作为每个列表项的类,则您可以选择。覆盖ToString()方法。可能像这样:

public override string ToString()
{
    // here is a really primitive algorithm
    return string.Format("{0}{1}",
        this.DisplayProperty.Take(1),
        this.DisplayProperty.Substring(1).ToLower());
}

但是,如果您不拥有作为每个列表项的类,那么您就会陷入困境,因为您不想修改数据源。

于 2013-08-06T21:49:54.983 回答