我有一个数据源给我一个IEnumerable<SelectListItem>
每个 selectListItem 中的文本都是大写的。我想找到最简单的方法将它们更改为适当的大小写,而无需实际更改数据源。
问问题
489 次
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 回答