如何将IEnumerable数据填充到嵌套视图模型的下拉列表中?

时间:2017-05-12 20:14:38

标签: asp.net-mvc ienumerable html.dropdownlistfor

我正在尝试将我的类别填充到下拉列表中。当用户选择一个类别时,我将调用ajax函数并显示有关所选项目的部分视图。即使我可以填充类别名称,我也无法添加每个类别的相应值。 生成的Html:

<select class="test" id="myDropDown" name="filterName"><option value="">
Select a category</option>
<option>Games</option>
<option>Business</option>
<option>Life</option>
<option>Health</option>
<option>Education</option>
<option>Music</option>
<option>Media</option>

我的观点模型:

namespace CETAPPSUGG.Models
{
  public class HomeCombinedModel
    {

    public IEnumerable<Apps> Apps { get; set; }
    public IEnumerable<Categories> Categories { get; set; }
    public IEnumerable<SubCatagories> SubCategories { get; set; }


    }
}

我的控制器:

public ActionResult Index()
        {

            var apps = db.Apps.Include(a => a.Categories).Include(a => a.SubCatagories).Include(a => a.ApplicationUser);
            var categories = db.Categories.ToList();
            var subcategories = db.SubCatagories.ToList();


            HomeCombinedModel deneme = new HomeCombinedModel();

            deneme.Apps = apps.ToList();
            deneme.Categories = categories;
            deneme.SubCategories = subcategories;
            return View(deneme);


        }

我的观点:

 @Html.DropDownList("filterName", new SelectList(Model.Categories.Select(i => i.CategoryName).Distinct().ToList()), "Select a category", new {id = "myDropDown", @class = "test" })

     @Html.DropDownListFor(
    Model.Categories.Select(i => i.Id)
    new SelectList(Model.Categories.Select(i => i.CategoryName).Distinct().ToList()))

问题出在我看来。如何将我的项目的id值填充到下拉列表中。谢谢。

1 个答案:

答案 0 :(得分:0)

创建一个类型为SelectListItem的IEnumerable。

public IEnumerable<SelectListItem> StatesList()
{
    var list = new List<SelectListItem>()
    {
        new SelectListItem() { Text="", Value=null },
        new SelectListItem() { Text="Alabama", Value="AL"},
        new SelectListItem() { Text="Alaska", Value="AK"},
        new SelectListItem() { Text="Arizona", Value="AZ"},
        new SelectListItem() { Text="Arkansas", Value="AR"},
    };
    return list;
}

然后只需将下拉列表添加到表单中即可。

@Html.DropDownListFor(Model => Model.Address.State, Model.StatesList())

您可以使用现有列表动态生成SelectListItems。

编辑 - 这是一个更详细的例子。

    public IEnumerable<Category> Categories { get; set; }
    public IEnumerable<SelectListItem> CatagoriesSelectList
    {
        get
        {
            var list = new List<SelectListItem>();

            foreach(Category c in Categories)
            {
                list.Add(new SelectListItem()
                {
                    Text = c.Key,
                    Value = c.Value
                });
            }

            return list;
        }
    }

    public class Category
    {
        public string Key { get; set; }
        public string Value { get; set; }
    }

在此特定示例中,您需要在自定义类中拥有临时属性,然后在POST模型时,将其映射到相应的类别并更新该值。我希望这是有道理的。