0

各selectListItemIEnumerable<SelectListItem>のテキストはすべて大文字です。実際にデータソースを変更せずに、大文字と小文字を適切に変更する最も簡単な方法を見つけたいと思います。

4

2 に答える 2

3

最善の答えは、ビューに渡す前に Enumerable を SelectListItems に変換し、その後ケースを TitleCase に変換することだと思います。あなたのためのいくつかの偽のコード:

この DataSource を考えると:

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 --")

そして、私はこれを取得します:

ここに画像の説明を入力

理論的には、「テキスト」引数がある ToTileCase を呼び出すことでビューの大文字と小文字を変更することもできると思いますが、それはあまりきれいではないと思います。

編集: SelectListItem を作成するためのコードを修正して、Value を大文字のままにします (e.ToTitleCase() ではなく e として) - 最終的には元のデータ ソースにバインドされると思います:)

于 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 に答える