6

我想为我的模型类的某些属性生成一个下拉列表。我正在开发一个 mvc .net 应用程序,并且我正在使用 razor 引擎来查看视图。这是我的课:

public class present
{       
    public DateTime jour { get; set; }
    public int entree_mat_h { get; set; }
    public int entree_mid_h { get; set; }
    public int sortie_mat_h { get; set; }
    public int sortie_mid_h { get; set; }
    public int entree_mat_m { get; set; }
    public int entree_mid_m { get; set; }
    public int sortie_mat_m { get; set; }
    public int sortie_mid_m { get; set; }
    public string mac { get; set; }
    public string ip { get; set; }
}

例如,我想为每个整数属性显示一个从 0 到 60 的值的下拉列表。@html.dropdownlistfor() 在这种情况下有效吗?

4

3 回答 3

8

在您看来,声明可能值的列表,在您的情况下为 0 到 60

@{ var values = new SelectList(Enumerable.Range(0, 60)); }

然后,您可以在DropDownListFor助手中使用它

@Html.DropDownListFor(m => m.entree_mat_h, values)
@Html.DropDownListFor(m => m.entree_mid_h, values)
....
于 2012-08-22T09:54:05.277 回答
0

是的,但是您需要将自定义选择列表与您想要的值一起传递给它。

所以你会做这样的事情:

   var list = new List<SelectListItem>();

   for(int i=1; i < 61; i++)
   {
        list.Add(new SelectListItem{Text = i, Value = i});
   }

   var sl = new SelectList(items, "Value", "Text");

然后你需要将它传递给模型

然后在视图中,您将执行以下操作:

 @Html.DropDownListFor(x => x.Quantity, @Model.Quantity)

或类似的规定。

显然我使用了假名字,所以你需要让它适合你自己的模型。

于 2012-08-22T09:52:37.157 回答
0

使用此扩展方法从源构建下拉列表(选择所有投影到键和值的值)。例子

public static IEnumerable<SelectListItem> ToDropDown<TSource>(this IEnumerable<TSource> source, Func<TSource, string> keySelector, Func<TSource, string> elementSelector, Func<TSource,bool> selected)
        {
            if (source == null)
            {
                return new List<SelectListItem>();
            }
            return source.Select(c => new SelectListItem { Value = keySelector(c), Text = elementSelector(c), Selected = selected(c) }).ToList();
        }

填满你的viewBag

ViewBag.Languages = languageRepository().GetAll().ToList().ToDropDown(c => c.ID, c => c.Description, c => c.ID == "EN");

最后是剃须刀

 @Html.DropDownList("ddLanguages", (IEnumerable<SelectListItem>)ViewData.Languages, "Please Select")
于 2012-08-22T09:54:20.197 回答