4

Razor は言うまでもなく、MVC の HTML ヘルパー拡張機能はまったく初めてで、値を数値とテキストとして、1 年のうち 12 か月のドロップダウン リストを表示するシンプルできちんとした方法を探しています。日付の「MMM」表現。

したがって、最後の HTML は次のようになります。

<select>
  <option value="1">Jan</option>
  <option value="2">Feb</option>
  <option value="3">Mar</option>
  <!-- etc -->
</select>

これを完全にビューで行うことは可能ですか? @Html.DropDownListFor()自動モデル バインディングを利用できるように、ユーザーが回答する必要があります。以下のコード行に近づきましたが、明確な値がありません。

@Html.DropDownListFor(model => Model.DobMonth, new SelectList(Enumerable.Range(1,12).Select(r => new DateTime(2000, r, 1).ToString("MMM"))), "- -")

技術的な理由以外で、jQuery の日付ピッカーを使用できません。

4

1 に答える 1

19

問題は、を作成するときに パラメータdataValueとパラメータを指定しないと、項目を呼び出してオプションのテキストとして使用することです。dataTextSelectListToString

必要なのは、選択したテキストと値のペアを返すことです。

@Html.DropDownListFor(model => Model.DobMonth, new SelectList(
        Enumerable.Range(1, 12)
            .Select(r => new
                             {
                                Text = new DateTime(2000, r, 1).ToString("MMM"), 
                                Value = r.ToString()
                             }),
        "Value", "Text", Model.DobMonth))

「空の」アイテムが必要な場合は、手動で追加する必要があります。

@Html.DropDownListFor(model => Model.DobMonth, new SelectList(
        new [] { new { Text = "- -", Value = (string)null } }.Concat(
        Enumerable.Range(1, 12)
            .Select(r => new
                             {
                                Text = new DateTime(2000, r, 1).ToString("MMM"), 
                                Value = r.ToString()
                             })),
        "Value", "Text", Model.DobMonth))
于 2012-06-06T07:32:44.617 に答える