0

我有一个下拉列表,其中列出了可选择的日期。我想预先选择某个日期,但即使它被标记为“已选择”,在查看下拉列表时它也不会显示为已选择。

在此处输入图像描述

<%=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:我已经尝试过 value 和 text 都没有工作)

有任何想法吗?

4

3 回答 3

1

您应该将SelectDropOfDate模型上的属性值设置为相应的值(而不是文本)。例如:

model.SelectDropOfDate = departureDate.ToString("d/M/yyyy", new DateTimeFormatInfo());

另请注意,该值必须完全匹配才能预选相应的元素。

于 2013-05-08T09:43:07.760 回答
0

似乎DropDownListFor在 asp.mvc 中有这个错误,我认为“选择”将不起作用,因为 Lamda 表达式的 htmlhelper 覆盖了“选择”属性。所以只要确保model.SelectDropOfDate=departureDate.ToString("d/M/yyyy", new DateTimeFormatInfo())已经运行。我在 Mvc3 中试过这个,当值真正匹配时它会选择写入项。

于 2013-05-08T10:36:44.107 回答
0

我的道歉,有一个愚蠢的 javascript 覆盖了我选择的东西,这把事情搞砸了。我确实创建了一个测试项目来验证这里的建议,这就是我发现的(对于其他阅读此线程的人):

selectedDropOfDate 不必填写,事实上,当我填写它时它根本不起作用。让列表有一个标记为 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) %>
于 2013-05-08T10:36:57.560 回答