我需要在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循环缺少元素,但显然是因为我做错了。
[要做的第一件事是创建一个新变量,该变量将存储我们的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" });
我希望我的解决方案能满足您的需求。如果您有任何问题,请告诉我。