0

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

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

为下拉列表中每个列表项的文本字段生成“6/24/2013 12:00:00 AM”。

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

'2013 年 6 月 24 日'

我想为模型数据坚持 DateTime 结构,但我想,我可以生成具有自定义属性的自定义对象列表并运行以下命令:

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

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

4

2 回答 2

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));
于 2012-08-07T21:20:44.477 回答
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));
于 2012-08-08T06:51:42.740 回答