ASP.. NET MVC 5 Html.DropDownListFor with datetime不起作用

本文关键字:with datetime 不起作用 DropDownListFor Html NET MVC ASP | 更新日期: 2023-09-27 18:02:54

我有一个类型为Datetime的属性,在编辑视图中,用户使用Html.DropDownListFor选择该属性,问题是Html.DropDownListFor没有在SelectList中获得属性Selected来选择值。我知道这是因为属性中的值有其他值,但是当我更改属性名称时,我可以工作:

价值观:

CancellationDate = {9/10/2016 12:00:00 AM}
CancellationDateListItem = new List<SelectListItem> {
   new SelectListItem 
                { 
                    Selected = true,
                    Text = "09/10/2016",
                    Value = "09/10/2016",
                    Disabled = false,
                    Group = null
                },
   new SelectListItem 
                { 
                    Selected = true,
                    Text = "09/11/2016",
                    Value = "09/11/2016",
                    Disabled = false,
                    Group = null
                }
};
CancellationDateListSelected = new SelectList(CancellationDateListItem);   
CancellationDateListWithStringSelectedValue = new SelectList(CancellationDateListItem, CancellationDate.ToString("MM/dd/yyyy"));
CancellationDateListWithDateTimeSelectedValue = new SelectList(CancellationDateListItem, CancellationDate);

这些例子不起作用:

@Html.DropDownListFor(model => model.CancellationDate, CancellationDateListSelected )
@Html.DropDownList("CancellationDate", CancellationDateListSelected )
@Html.DropDownListFor(model => model.CancellationDate, CancellationDateListWithStringSelectedValue )
@Html.DropDownListFor(model => model.CancellationDate, CancellationDateListWithDateTimeSelectedValue )

,但显然这很好:

@Html.DropDownList("OtherName", CancellationDateListWithStringSelectedValue )

我想/知道这是由DateTime类型。我可以强制在DropDownListFor中获得SelectList中的属性Selected来选择该选项吗?

ASP.. NET MVC 5 Html.DropDownListFor with datetime不起作用

我相信这可能会有帮助。它没有绑定值的原因是-在设置值的同时,像下面这样调用了new。

  new SelectListItem 
    { 
        ....
    };

请尝试使用{get;在类定义中设置;}。然后,在您的控制器中,或在实现中的其他地方,设置所需的值。

  DateTime dt {get;set;}
  ...
  dt = "9/10/2015";

当绑定到一个属性时,试图设置SelectListItemSelected属性是毫无意义的,因为它的属性值决定了所选择的值。由于CancellationDate的值是"9/10/2016 12:00:00 AM",这与您的选择列表中的任何值都不匹配(即"09/10/2016"answers"09/1/2016"),那么第一个选项将始终被选中(因为有些东西必须是)。

你的GET方法应该包含

List<string> dates = new List<string>() { "09/10/2016", "09/11/2016" };
model.CancellationDateListItem = new SelectList(dates);
model.CancellationDate = "09/11/2016";
return View(model);

和视图

@Html.DropDownListFor(m=> m.CancellationDate, Model.CancellationDateListItem)

因为CancellationDate的值与第二个选项的值匹配,所以该值将被选中