如何在mvc3 razor下拉列表中显示日期的短/自定义版本?

时间:2012-08-07 20:59:09

标签: c# asp.net-mvc-3 razor

我有一个下拉列表,只需要显示月/日/年,没有时间。它绑定到IEnumerable< DateTime>由模型提供。使用默认方法会显示一个很长的日期:

@Html.DropDownList("SelectedDate", new SelectList(Model.Dates, Model.SelectedDate));

生成'6/24/2013 12:00:00 AM'以获取下拉列表中每个列表项的文本字段。

如何显示文本字段的短日期,如下所示:

“2013年6月24日

我想坚持使用DateTime结构模型Data,但我想,我可以使用自定义属性生成一个自定义对象列表并运行以下命令:

@Html.DropDownList("SelectedDate", new SelectList(Model.DisplayDates, "Value", "ShortDate", Model.SelectedDate));

但也许有更优雅的解决方案?

2 个答案:

答案 0 :(得分:0)

制作副本,遍历它,将日期更改为更合适

@{
 List<string> shortDates = new List<string>();
 for (var i = 0; i < Model.Dates.Count; i++)
 {
  shortDates.Add(Model.Dates.ElementAt(i).ToShortDateString());
  }
}

使用副本

@Html.DropDownList("SelectedDate", new SelectList(shortDates, Model.SelectedDate));

答案 1 :(得分:0)

基本上,这是我发现的唯一一个丑陋的解决方案,可用于自定义DateTime对象的下拉列表,而不会失去在下拉列表中设置选定日期的能力。

在DateTime对象周围使用简单的包装类:

public class DisplayDateTime
{
    private DateTime dt;
    private string shortDate;

    public DisplayDateTime(DateTime d)
    {
        dt = d;
        shortDate = dt.ToString("d");
    }

    public DateTime Date
    {
        get
        {
            return dt;
        }
    }

    public string ShortDate
    {
        get
        {
            return shortDate;
        } 

    }
}

然后由模型使用:

    public List<DisplayDateTime> GetDisplayDates()
    {
        var displayDates = new List<DisplayDateTime>();
        foreach (var d in Dates)
        {
            displayDates.Add(new DisplayDateTime(d));
        }

        return displayDates;
    }

然后像这样喂给剃刀:

@Html.DropDownList("SelectedDate", new SelectList(Model.GetDisplayDates(), "Date", "ShortDate", Model.SelectedDate));