【问题标题】:Drop down list not populating from List MVC下拉列表未从 List MVC 中填充
【发布时间】:2013-12-17 16:07:02
【问题描述】:

我对 DropDownListFor 助手的问题感到困惑。

我正在尝试为下拉列表分配一个值列表,如下所示:

型号

public Int32 TestID {get;set;}

public List<Int32> ListOfID {get;set;}

public IEnumerable<SelectListItem> TimeDD {get;set;}

控制器

public ActionResult Manage(int id){

    MyModel model = new MyModel();

    model.TimeDD = DropDownManager.TimeDD;

    model.TestID = 12;
    model.ListOfID = new List<Int32>{ 1,2,3,4,5,6,7};
    return View(model);
}

在视图中我有以下内容:

@for(int i = 0; i< ListoFID.Count; i++){

     <div>@Html.DropDownListFor(m=> m.TestID, Model.TimeDD)</div>
     <div>@Html.DropDownListFor(m=> m.ListoFID[i], Model.TimeDD)</div>
}

我遇到的问题是 TestID 下拉列表工作正常,但是 ListoFID[i] 没有从下拉列表中选择值。 TimeDD 是一个时间列表,如下所示:

/// <summary>
        /// The Time dropdown
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public static IEnumerable<SelectListItem> TimeDD()
        {
            // new ctl
            TimeControl ctl = new TimeControl();

            // get drop down
            IEnumerable<SelectListItem> result = ctl.Select().Select(m => new SelectListItem { Text = m.Time1, Value = m.TimeID.ToString() }).ToList();

            // clean up
            ctl.Dispose();

            return result;
        }

Time1 是 '09:30' 而 TimeID 是 1 - 48。我不知道这是怎么发生的!!一旦我引用一个对象,它就无法在正确的点选择下拉菜单。

编辑 此外,我的模型中有一个名为 OpeningTimes 的属性 - 这是针对公司保存的开放时间列表,如下所示:

ComapnyID    DayID    StartTime    EndTime
   1           1         19           32        -- e.g. Monday 09:00 - 17:30

当我循环播放开放时间时:

@for(int i=0; i< Model.OpeningTimes.Count; i++)
        {
            <tr>

                <td>
                   @Html.DropDownListFor(m => m.OpeningTimes[i].StartTime, Model.TimeDD)
                </td>
                <td>
                    @Html.DropDownListFor(m => m.OpeningTimes[i].EndTime, Model.TimeDD)
                </td>

            </tr>
        }

下拉菜单仍未被选中。我可以确认 StartTime 和 EndTime 确实有值并且是属性 int

【问题讨论】:

  • 当你循环播放开放时间时......什么?
  • @RoyDictus 请查看编辑
  • 我的回答仍然有效。您正在尝试映射不是模型的直接属性的东西,对于DropDownListFor,它不起作用。
  • 好的,有没有一种解决方法可以从对象列表中填充下拉列表,而不是我在模型中创建 MondayStartTime、MondayEndTime 属性?

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

DropDownListFor 需要映射到的属性,而不是值。所以

@Html.DropDownListFor(m=> m.ListoFID[i], Model.TimeDD) /* the [i] kills it */

不会工作。

【讨论】:

  • 您好,请参阅编辑。从我的模型中引用对象和属性时,这不起作用??
  • 只针对下拉。文本框等所有其他元素都可以正常工作
【解决方案2】:

而不是像其他的那样构建一个 int 列表

List<SelectListItem> ls = new List<SelectListItem>();
foreach(var temp in Model.ListOfId){
    ls.Add(new SelectListItem() { Text = temp, Value = temp});
}

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多