我用谷歌搜索了这个并尝试了很多不同的变化。我认为我遇到的问题是有很多方法可以做到这一点,而且我没有看到树木的木材。
我有一个数据库中的设备列表。每行都分配给一家公司。 “Contoso Ltd”公司可能有10件设备,“Geldof Industries”有23件设备。
我有一个使用实体框架的脚手架视图来显示整个数据库的所有设备。这很好。
我想要做的是在视图上有一个下拉列表,其中填充了表中不同公司的列表,然后选择公司,然后在视图中过滤结果。
目前我的控制器有这个:
var serverList = from s in db.tbl_equipment
where (s.Company == "Contoso Ltd") && (s.Calc_Contract_Status == true)
where (s.Equip_type == "PC") || (s.Equip_type == "Laptop") || (s.Equip_type == "Mac") || (s.Equip_type == "Tablet") || (s.Equip_type.Contains("Server"))
select s;
return View(serverList.ToList());
据我了解,我会根据LINQ查询填充下拉列表,并使用viewbag将其发送到视图,然后使用Dropdownlistfor html helper创建下拉列表。我假设我之后需要在控制器中捕获post请求。
我发现在Razor和ASP.NET Entity Framework中生成下拉列表的每个站点都不同。任何帮助将不胜感激!
答案 0 :(得分:0)
假设您要填充包含服务器列表的下拉列表。
创建一个视图模型(您可以使用viewbag
,viewdata
执行此操作,但这样做会好得多)
视图模型
public class ServerViewModel
{
// Display Attribute will appear in the Html.LabelFor
[Display(Name = "Server")]
public int SelectedserverId { get; set; }
public IEnumerable<SelectListItem> ServerList { get; set; }
}
在控制器内部创建一个方法来获取您的Sever列表并将其转换为将在视图中显示的表单。
控制器:
private IEnumerable<SelectListItem> GetAllServers()
{
var serverList = from s in db.tbl_equipment
where (s.Company == "Contoso Ltd") && (s.Calc_Contract_Status == true)
where (s.Equip_type == "PC") || (s.Equip_type == "Laptop") || (s.Equip_type == "Mac") || (s.Equip_type == "Tablet") || (s.Equip_type.Contains("Server"))
select s;
var servers = serverList
.Select(x =>
new SelectListItem
{
Value = x.serverId.ToString(), //assuming you have this two property in your table
Text = x.severName
});
return new SelectList(servers , "Value", "Text");
}
public ActionResult GetServerList()
{
var model = new ServerViewModel
{
ServerList = GetAllServers()
};
return View(model);
}
现在创建了viewmodel,简化了表示逻辑
查看:
@model ServerViewModel
@Html.LabelFor(m => m.SelectedserverId )
@Html.DropDownListFor(m => m.SelectedserverId , Model.ServerList )
显示您的列表。希望这会有所帮助......