【问题标题】:MVC Razor - use @Html.DropDownListFor() for the 12 months of the yearMVC Razor - 一年中的 12 个月使用 @Html.DropDownListFor()
【发布时间】:2013-10-27 01:55:16
【问题描述】:

我对 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 日期选择器。

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    你快到了,问题是如果你在创建SelectList 时不提供dataValuedataText 参数,它只会在项目上调用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))
    

    【讨论】:

    • 完美,你给了我想要的东西,谢谢。不要总是得到如此简洁、准确的答案。
    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多