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

How to populate IEnumerable data to dropdownlist for nested view model?

我正在尝试将我的类别填充到下拉列表中。当用户 select 一个类别时,我将调用一个 ajax 函数并显示关于 select 项目的部分视图。即使我可以填充类别名称,我也无法添加每个类别的相应值。 生成 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 值填充我的项目到下拉列表。谢谢。

创建一个 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; }
    }

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