如何将 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 您的模型时,将其映射到相应的类别并更新该值.我希望这是有道理的。
我正在尝试将我的类别填充到下拉列表中。当用户 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
.
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 您的模型时,将其映射到相应的类别并更新该值.我希望这是有道理的。