我有一个下拉列表,其中列出了可选日期。我想预先选择一个特定的日期,但即使它被标记为“已选择”,但在查看下拉列表时它并未显示为已选择日期。
<%=Html.DropDownListFor(model => model.SelectDropOfDate, Model.DropOffDates, new { id = "dropOfDate" })%>
在我读过的一个帖子中,他们说“model.SelectDropOfDate”(在这种情况下)是选中的项目,如果是这种情况,我应该选择值还是文本,以使其与清单?
(the list of dates).Where(x=>x.Selected).Select(z=>z.Value).ToString();
(Ps:我已经尝试了值和文本,但没有一个工作)
有什么想法吗?
答案 0 :(得分:1)
您应该在模型上设置SelectDropOfDate
属性的值,而不是相应的值(不是文本)。例如:
model.SelectDropOfDate = departureDate.ToString("d/M/yyyy", new DateTimeFormatInfo());
另请注意,该值必须具有完全匹配,以便预先选择相应的元素。
答案 1 :(得分:0)
似乎asp.mvc中的DropDownListFor
有这个错误,选择&#39;不会工作我认为因为Lamda Expression的htmlhelper覆盖了所选的&#39; property。所以只需确保model.SelectDropOfDate=departureDate.ToString("d/M/yyyy", new DateTimeFormatInfo())
已运行。
我在Mvc3中尝试了这个,当值真正匹配时它会选择写项目。
答案 2 :(得分:0)
我的appologies,有一个愚蠢的javascript覆盖我选择的搞砸了。我确实创建了一个测试项目来验证这里的建议,这是我发现的(对于其他读过这个帖子的人):
selectedDropOfDate不必填写,事实上,当我填写时,它根本不起作用。让List有一个标记为selected = true的项目效果不错。
示例代码
型号:
public class Home
{
public string Selected { get; set; }
public List<SelectListItem> Items { get; set; }
}
控制器:
public ActionResult Index()
{
var model = new Home();
model.Items = GetItems(DateTime.Now, DateTime.Now.AddDays(3));
return View(model);
}
private List<SelectListItem> GetItems(DateTime start, DateTime end)
{
var dates = new List<DateTime>();
for (double i = 0; i < 100; i++)
{
dates.Add(start.AddDays(i + 1));
}
var selectList = new List<SelectListItem>();
selectList.AddRange(dates.Select(x => new SelectListItem
{
Selected = x.Date == end.Date,
Text = x.ToString("d.M.yyyy"),
Value = x.ToString("d/M/yyyy", new DateTimeFormatInfo())
}));
return selectList;
}
查看:
<%= Html.DropDownListFor(model => model.Selected, Model.Items) %>