如何在 mvc3 剃须刀下拉列表中显示日期的简短/自定义版本



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

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

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

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

'

6/24/2013'

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

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

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

制作副本,遍历它,更改日期以使其更适合

@{
 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));

基本上,这是我发现的唯一丑陋的解决方案,可用于自定义 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));

最新更新