Asp.net mvc 4 使用MVC4创建动态下拉列表

Asp.net mvc 4 使用MVC4创建动态下拉列表,asp.net-mvc-4,razor,html.dropdownlistfor,selectlist,selectlistitem,Asp.net Mvc 4,Razor,Html.dropdownlistfor,Selectlist,Selectlistitem,我正在创建一个MVC项目,我正在使用razor进行我的视图。我对下拉列表的一个基本问题感到困惑。我有一个下拉列表,我想从之前页面中的文本框中填充它,所以我将它放入一个对象中。我正在填充列表,但它不是完全动态的 public class FormInformation { public IEnumerable<SelectListItem> ListItems { get; set; } public string[] SelectedItems { get; set;

我正在创建一个MVC项目,我正在使用razor进行我的视图。我对下拉列表的一个基本问题感到困惑。我有一个下拉列表,我想从之前页面中的文本框中填充它,所以我将它放入一个对象中。我正在填充列表,但它不是完全动态的

public class FormInformation
{
    public IEnumerable<SelectListItem> ListItems { get; set; }
    public string[] SelectedItems { get; set; }
    public ServiceObject serviceObject { get; set; }
}
公共类表单信息
{
公共IEnumerable列表项{get;set;}
公共字符串[]SelectedItems{get;set;}
公共服务对象服务对象{get;set;}
}
我按如下方式填充选择列表:

 private SelectList CreateSelectListItems(int counter, List<string> clients)
    {
        if (counter == 1)
        {
            return new SelectList(new[]
                    {
                        new {id = 1, Name = ""},
                        new {id = 2, Name = clients[0]},
                    }, "Id", "Name");
        }
        if (counter == 2)
        {
            return new SelectList(new[]
                    {
                        new {id = 1, Name = ""},
                        new {id = 2, Name = clients[0]},
                        new {id = 3, Name = clients[1]},
                    }, "Id", "Name");
        }
        if (counter == 3)
        {
            return new SelectList(new[]
                    {
                        new {id = 1, Name = ""},
                        new {id = 2, Name = clients[0]},
                        new {id = 3, Name = clients[1]},
                        new {id = 4, Name = clients[2]},
                    }, "Id", "Name");
        }
        else
        {
            return new SelectList(new[]
                    {
                        new {id = 1, Name = ""},
                        new {id = 2, Name = clients[0]},
                        new {id = 3, Name = clients[1]},
                        new {id = 4, Name = clients[2]},
                        new {id = 5, Name = clients[3]},
                    }, "Id", "Name");
        }
    }
}
private SelectList CreateSelectListItems(整数计数器、列表客户端)
{
如果(计数器==1)
{
返回新的选择列表(新[]
{
新的{id=1,Name=”“},
新的{id=2,Name=clients[0]},
}“身份证”、“姓名”);
}
如果(计数器==2)
{
返回新的选择列表(新[]
{
新的{id=1,Name=”“},
新的{id=2,Name=clients[0]},
新的{id=3,Name=clients[1]},
}“身份证”、“姓名”);
}
如果(计数器==3)
{
返回新的选择列表(新[]
{
新的{id=1,Name=”“},
新的{id=2,Name=clients[0]},
新的{id=3,Name=clients[1]},
新的{id=4,Name=clients[2]},
}“身份证”、“姓名”);
}
其他的
{
返回新的选择列表(新[]
{
新的{id=1,Name=”“},
新的{id=2,Name=clients[0]},
新的{id=3,Name=clients[1]},
新的{id=4,Name=clients[2]},
新的{id=5,Name=clients[3]},
}“身份证”、“姓名”);
}
}
}

我需要这是完全动态的。这只允许四种可能性。我知道这件事很小,我不明白。所以我可能有3个客户,或者我可能有7个客户。我如何遍历所有客户机并添加它们而不需要计数器?非常感谢。

您可以尝试使用Linq to Objects方法重载,该重载在通过顺序重新排序时提供元素的索引:

private SelectList CreateSelectListItems(List<string> clients)
{
    clients.Insert(0, "");
    var items = clients.Select((el, index)=> new {id = index + 1, Name = el})
                       .ToList();
    return new SelectList(items, "Id", "Name");
}
private SelectList CreateSelectListItems(列表客户端)
{
客户。插入(0,“”;
var items=clients.Select((el,index)=>new{id=index+1,Name=el})
.ToList();
返回新的选择列表(项目,“Id”、“名称”);
}

太棒了!这正是我需要的。非常感谢你,这很有帮助。