使用控制器和列表中的viewModel在视图中填充下拉列表

时间:2012-12-05 20:30:35

标签: asp.net-mvc drop-down-menu model

似乎以前从未做过这个看似简单的任务。

我有一个控制器,其操作可以检索包含我的语言信息的表格文化:

    [HandleError]
    [ChildActionOnly]
    public ActionResult LanguageDropdownlist()
    {
        var languageDropdownlist = _unitOfWork.CulturesRepository.Get();
        return PartialView("_LanguageSelectionPartial", languageDropdownlist.ToList());
    }

languageDropdownlist的结构如下:

List languageDropdownlistItems 
[0]
    - display_name
    - id
    - name
    - ...
[1]
    - display_name
    - id
    - name
    - ...
[2]
    - display_name
    - id
    - name
    - ...
[3]
    - display_name
    - id
    - name
    - ...

我将列表传递给视图

视图中执行以下操作:

@model List<ArtWebShop.Models.cultures>


<p>
    @Html.DropDownList("name", (IEnumerable<SelectListItem>)Model)
</p>

如何为上帝之爱填充下拉列表,位于视图中的上述代码显然不起作用,但我似乎无法从控制器和视图中找到代码的单一解释。

P.S。:我不想使用viewData或viewBag。

2 个答案:

答案 0 :(得分:0)

请注意:How do you create a dropdownlist from an enum in ASP.NET MVC?

我喜欢<%: Html.EnumDropDownListFor(model => model.MyEnumProperty) %>

对你有用吗?

答案 1 :(得分:0)

我找到了解决方案。得到了我的灵感: http://forums.asp.net/t/1817879.aspx/1实际上非常简单。

在我的控制器

    public ActionResult LanguageDropdownlist()
    {
        var culturelist = (_unitOfWork.CulturesRepository.Get()).ToArray();
        var list = new List<SelectListItem>();
                    for (int i = 0; i < culturelist.Count(); i++)
        {
            list.Add(new SelectListItem { Text = culturelist[i].name, Value = culturelist[i].id.ToString() });
        }

        return PartialView("_LanguageSelectionPartial", list);

    }

在这里,我将它们添加到我的视图中,以便我可以在那里访问它们。

最后在我的部分视图

@model List<SelectListItem>


<p> 
    @Html.DropDownList("language-dropdown",  Model)
</p>

我通过@model访问它们并将它们放在@ Html.DropDownList。