4

我对 MVC 中的 HTML 帮助程序扩展非​​常陌生,更不用说在 Razor 中了,我正在寻找一种简单、整洁的方式来显示一年中 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

你快到了,问题是如果你在创建时不提供dataValueanddataText参数,SelectList它只会调用ToString项目并将它们用作选项的文本。

您需要从您的选择中返回文本、值对:

@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 回答