c# - 如何使用 Razor/MVC 5 将元素动态添加到下拉列表
问题描述
我需要在我的 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
s。Obvioulsy,第一个和最后一个SelectListItem
s 是特殊的,第一个具有属性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。然后我们将迭代我们的“候选人”,我们将添加一个新项目,其属性将根据您的逻辑进行设置。
@{
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" });
我希望我的解决方案能满足您的需求。如果您有任何问题,请告诉我。
推荐阅读
- javascript - 在反应中使用 d3 在饼图悬停时添加工具提示
- vba - 运行时错误 3464:条件中的数据类型不匹配。需要将访问报告导出为 PDF
- android - 有什么方法可以在 android studio 中创建新的语言环境?
- javascript - 当我使用 reactnative 时,如何在 useEffect 中使用异步等待?
- android - 如何在这个颤动代码中添加自定义字体
- sql - 如何将“INNER JOIN”添加到现有的“NOT EXIST”查询?查询在下面的描述中
- python - Pandas DataFrame 重命名函数
- c# - 如何在 Xamarin Forms MVVM Prism 的选择器中隐藏单个元素?
- android - 如何在recyclerview中将刷过的项目转回
- c# - 如何从 C# 上另一个已打开的表单中调用事件?