我有一个下拉列表,只需要显示月/日/年,没有时间。它绑定到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));
但也许有更优雅的解决方案?
答案 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));