【问题标题】:How to populate IEnumerable data to dropdownlist for nested view model?如何将 IEnumerable 数据填充到嵌套视图模型的下拉列表?
【发布时间】:2017-10-12 06:00:59
【问题描述】:

我正在尝试将我的类别填充到下拉列表中。当用户选择一个类别时,我将调用一个 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 值填充到下拉列表中。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我添加了 public List CategoryList() { return Categories.ToList();这段代码到控制器。但在我看来@Html.DropDownListFor(Model => Model.Categories, Model.CategoryList()) 还有问题吗?
    • 我的建议是生成一个 selectlistitems 列表,而不是 OF 类别,而是 FROM 类别......如果这有意义的话。我不明白你在说什么。
    • 顺便说一下,SelectListItem 是 Microsoft.AspNetCore.Mvc.Rendering 中的预定义类 - 此引用在所有视图中都是默认的。只需在包含您的 List 的类中添加对它的引用,然后按照我在上面的编辑中提供的示例进行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-03-07
    • 2021-06-11
    相关资源
    最近更新 更多