如何使用Razor / MVC 5将元素动态添加到下拉列表中

问题描述 投票:1回答:1

我需要在asp.net应用程序中更改以下下拉列表,现在我必须根据用户类型添加值,而这在以前是不需要的。以下代码可以正常工作,但显然我正在对元素的输入进行硬编码。

@Html.DropDownListFor(
    model => model.Vote, 
    new SelectList(
        new List<SelectListItem> {
            new SelectListItem { Selected=true, Text = "Randy", Value = "1" }, 
            new SelectListItem { Selected=false, Text = "Richard", Value = "2" },
            new SelectListItem { Selected=false, Text = "Bubbles", Value = "3" }, 
            new SelectListItem { Selected=false, Text = "Julian", Value = "4" } 
        }, 
        "Value", 
        "Text"
    ), 
    htmlAttributes: new { @class = "form-control" }
)

我正在从控制器接收列表,可以循环浏览它,但是我不能将此信息用作SelectListItem。Obvioulsy,第一个和最后一个SelectListItem是特殊的,第一个具有属性Selected设置为true,而其他属性设置为false,因此默认情况下选择第一个。另一方面,最后一个在结束标记}之前没有逗号,就像前面的一样,所以这就是我循环的方式。

@for (var i = 0; i < candidatos.Count(); i++)
{
    if (i == 0)
    {
        <h4>"First candidate:" + candidatos.ElementAt(i)</h4>
    }
    else if (i < candidatos.Count() - 1)
    {
        <h4>"Not first nor last:" + candidatos.ElementAt(i)</h4>
    }
    else
    {
        <h4>"Last candidate:" + candidatos.ElementAt(i)</h4>
    }
}

因此输出正确,但是我确实需要语法方面的帮助,我一直在努力将这种迭代与我进行硬编码的语法结合起来,并在下拉列表中正确地将元素显示为项目,但是我不知道如何至。

这是我试图将两者结合在一起的方式,但是出现错误。

@Html.DropDownListFor(model => model.Voto, new SelectList(new List<SelectListItem> { 
    for (var i = 0; i < candidatos.Count(); i++)
{
    if (i == 0)
    {
        new SelectListItem { Selected = true, Text = candidatos.ElementAt(i + 1), Value = (i + 2).ToString() },
    }
    else if (i < candidatos.Count() - 1)
    {
        { new SelectListItem { Selected = false, Text = candidatos.ElementAt(i + 1), Value = (i + 2).ToString() },
    }
    else
    {
        { new SelectListItem { Selected = false, Text = candidatos.ElementAt(i + 1), Value = (i + 2).ToString() } }, "Value", "Text" ),
            htmlAttributes: new { @class = "form-control" })
    }
}

浏览器对我吼叫,表达式需要在}之后加上一个结束

@Html.DropDownListFor(model => model.Voto, new SelectList(new List<SelectListItem> { 

[我认为我没有意识到我正在提供相应的结束标记,并且使用for循环缺少元素,但显然是因为我做错了。

c# asp.net drop-down-menu dropdown html-select
1个回答
0
投票

[要做的第一件事是创建一个新变量,该变量将存储我们的SelectListItem。然后,我们将迭代“ candidatos”,并添加一个新项目,该新项目的属性将根据您的逻辑进行设置。

@{ 
    var selectListItems = new List<SelectListItem>();

    for (int i = 0; i < candidatos.Count(); i++)
    {
        if (i == 0)
        {
            selectListItems.Add(new SelectListItem { Selected = true, Text = candidatos.ElementAt(i + 1), Value = (i + 2).ToString() });
        }
        else if (i < candidatos.Count() - 1)
        {
             selectListItems.Add(new SelectListItem { Selected = false, Text = candidatos.ElementAt(i + 1), Value = (i + 2).ToString() });
        }
        else
        {
             selectListItems.Add(new SelectListItem { Selected = false, Text = candidatos.ElementAt(i + 1), Value = (i + 2).ToString() });
        }
    }
}

最后,您会将新生成的列表作为第二个参数传递给Html类的DropDownListFor方法。

@Html.DropDownListFor(m => m.Voto, selectListItems, htmlAttributes: new { @class = "form-control" });

我希望我的解决方案能满足您的需求。如果您有任何问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.