Asp.net mvc 如何使用Html.DropDownListFor(…)格式化日期时间
我想要一个短日期格式的下拉列表。 但以下这些都不起作用。 我有 在我看来,我试过了Asp.net mvc 如何使用Html.DropDownListFor(…)格式化日期时间,asp.net-mvc,html.dropdownlistfor,Asp.net Mvc,Html.dropdownlistfor,我想要一个短日期格式的下拉列表。 但以下这些都不起作用。 我有 在我看来,我试过了 <div>@Html.DropDownListFor(m => m.TripDepartures.First().DepartrueDate, new SelectList(Model.TripDepartures.Select(s=> new SelectListItem { Value = s.Id.ToString(), Text = s.DepartrueDate
<div>@Html.DropDownListFor(m => m.TripDepartures.First().DepartrueDate, new SelectList(Model.TripDepartures.Select(s=>
new SelectListItem { Value = s.Id.ToString(), Text = s.DepartrueDate.Value.ToShortDateString() }).ToList()))</div>
</div>
@Html.DropDownListFor(m=>m.TripDeferences.First().DeferrueDate,新选择列表(Model.TripDeferences.Select)(s=>
新建SelectListItem{Value=s.Id.ToString(),Text=s.departureDate.Value.ToSortDateString()}.ToList())
它没有产出;
我也试过了
<div>@Html.DropDownListFor(m => m.TripDepartures.First().DepartrueDate, new SelectList(Model.TripDepartures, "Id","DepartrueDate"))</div>
</div>
@Html.DropDownListFor(m=>m.tripDeferences.First().deferrueDate,新选择列表(Model.tripDeferences,“Id”,“deferrueDate”))
它给出了我怎样才能得到一个短日期?你可以欺骗系统并绑定到字符串字段而不是日期字段:
[Property]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? DepartrueDate { get; set; }
public string DepartrueDateText { get { return DepartrueDate.ToShortDataString(); } }
但不要忘记您的空检查。:)
我经常这样做是为了枚举字段获得要识别的[Display(Name=”“)]属性。理想情况下,您不希望将域实体(TripDepartments)传递给Controller查看。这不是一个好的设计实践 相反,您希望传递SelectListItem 看法 难道不是:
@Html.DropDownListFor(m => m.TripDepartures.First().Id.ToString(), new SelectList(Model.TripDepartures.Select(s=>
new SelectListItem() { Value = s.Id.ToString(), Text = s.DepartrueDate.Value.ToShortDateString() }).ToList()))
如果不起作用:
你确定Model.TripDeferences有元素吗
我记得我自己在模型中添加了几次SelectList,因此您可以尝试在模型中添加SelectList类型的属性。您可以为每个DepartureDate添加SelectListItem,自行设置id和值,并自行循环和调试。它与Linq代码基本相同,但我记得我这样做是有原因的
Model.DepartureDateSelectList = new SelectList();
foreach (TripDeparture tripDeparture in Model.TripDepartures) {
{
SelectListItem item = new SelectListItem();
item.Value = tripDeparture.Id.ToString();
item.Text = tripDeparture.DepartueDate.Value.ToShortDateString(); //Didn't do a null check, since you didn't do it in you code either. You should change DataType to non-nullable or perform a check and handle if it's null
Model.DepartureDateSelectList.Add(item);
}
如果确实看到该列表,但未设置默认的选定项,则将建议的更改应用于选定项表达式。如果仍然没有正确设置,您可以自己在循环中设置选定的属性。DropDownList for中有一个错误,导致所选项目不总是被设置
public class HomeModel
{
public int SelectedTripDepartureId { get; set; }
public IList<SelectListItem> AvailableTripDepartures { get; set; }
public HomeModel()
{
AvailableTripDepartures = new List<SelectListItem>();
}
}
public class HomeController : Controller
{
public ActionResult Index()
{
HomeModel model = new HomeModel();
model.AvailableTripDepartures = GetTripDepartures()
.Select(s => new SelectListItem
{
Value = s.Id.ToString(),
Text = s.DepartrueDate.Value.ToString("MM/dd/yyyy")
}).ToList();
return View(model);
}
[HttpPost]
public ActionResult Index(HomeModel model)
{
int tripDepartureId = model.SelectedTripDepartureId;
DateTime? departrueDate = GetTripDepartures()
.Where(x => x.Id == tripDepartureId)
.Select(x => x.DepartrueDate)
.FirstOrDefault();
return View(model);
}
// This data will be from persistent storage such as database.
private IList<TripDeparture> GetTripDepartures()
{
return new List<TripDeparture>
{
new TripDeparture {Id = 1, DepartrueDate = DateTime.Now.AddDays(1)},
new TripDeparture {Id = 2, DepartrueDate = DateTime.Now.AddDays(2)},
new TripDeparture {Id = 3, DepartrueDate = DateTime.Now.AddDays(3)},
};
}
}
public class TripDeparture
{
public int Id { get; set; }
public DateTime? DepartrueDate { get; set; }
}
@Html.DropDownListFor(m => m.TripDepartures.First().Id.ToString(), new SelectList(Model.TripDepartures.Select(s=>
new SelectListItem() { Value = s.Id.ToString(), Text = s.DepartrueDate.Value.ToShortDateString() }).ToList()))
Model.DepartureDateSelectList = new SelectList();
foreach (TripDeparture tripDeparture in Model.TripDepartures) {
{
SelectListItem item = new SelectListItem();
item.Value = tripDeparture.Id.ToString();
item.Text = tripDeparture.DepartueDate.Value.ToShortDateString(); //Didn't do a null check, since you didn't do it in you code either. You should change DataType to non-nullable or perform a check and handle if it's null
Model.DepartureDateSelectList.Add(item);
}