ASP.NET在视图中生成下拉列表并回发到控制器时苦苦挣扎

时间:2014-11-11 11:21:48

标签: c# asp.net asp.net-mvc entity-framework razor

我用谷歌搜索了这个并尝试了很多不同的变化。我认为我遇到的问题是有很多方法可以做到这一点,而且我没有看到树木的木材。

我有一个数据库中的设备列表。每行都分配给一家公司。 “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中生成下拉列表的每个站点都不同。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

假设您要填充包含服务器列表的下拉列表。

创建一个视图模型(您可以使用viewbagviewdata执行此操作,但这样做会好得多)

视图模型

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 )

显示您的列表。希望这会有所帮助......