DropDownList用于显示List<;列表<;字符串>>;
本文关键字:gt lt 字符串 显示 列表 List 用于 DropDownList | 更新日期: 2023-09-27 18:22:23
我正在尝试使用@Html.DropDownListFor
将选择添加到多个下拉列表中。
查看
for (int i = 0; i < Model.questions.Count(); i++)
{
<fieldset>
<legend>Questions</legend>
<div class="editor-label">
@Html.DisplayFor(model=>model.questions[i].Question)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.answers[i].Answers, new SelectList(Model.hold[i]))
</div>
<hr />
</fieldset>
}
这将遍历我的模型中的所有问题并显示问题。下拉框用于用户选择该问题的答案。由于问题的数量和这些问题的答案是由管理员用户动态创建的,我不能简单地制作静态列表并将其插入下拉列表中。
控制器
public ActionResult Index()
{
//get the list of questions from db
var q = (from questions in db.questions select questions).ToList();
var answersList = (from answer in db.answers select answer).ToList();
List<List<string>> aList = SplitAnswers();
QAViewModel qa = new QAViewModel{questions = q, hold = aList, questionAnswers = answersList};
return View(qa);
}
public List<List<string>> SplitAnswers()
{
List<List<string>> aList = new List<List<string>>();
List<string> populate = new List<string>();
var answersList = (from answer in db.answers select answer).ToList();
var q = (from questions in db.questions select questions).ToList();
//Group answers by questionId to use in the view
for (int i = 0; i < q.Count(); i++)
{
for (int x = 0; x < answersList.Count(); x++)
{
if (answersList[x].QuestionsId == q[i].Qid)
{
populate.Add(answersList[x].answer);
}
}
aList.Insert(i, populate);
}
System.Diagnostics.Debug.WriteLine("test" + aList[1]);
return aList;
}
我正在使用aList
(类型为List<List<string>>
),以便我可以在aList
的每个元素处存储populate
(类型为List<string>
)。然而,每个下拉列表最终都显示了aList
的所有元素。
我不确定我是否滥用了List<List<string>>
,或者我是否以某种方式在aList
的每个元素处添加了populate
的所有元素。
更新
通过更改@Html.DropDownListFor(model => model.answers[i].Answers, new SelectList(Model.hold[1]))
中Model.hold
的索引,我可以看到该列表的每个元素都包含所有答案。
经过多次尝试和错误,我找到了解决这个问题的方法。我最终使用了一个List数组。
List<string>[] populate = new List<string>[30];
for (int i = 0; i < q.Count(); i++)
{
populate[i] = new List<string>();
for (int x = 0; x < answersList.Count(); x++)
{
if (answersList[x].QuestionsId == q[i].Qid)
{
populate[i].Add(answersList[x].answer);
System.Diagnostics.Debug.WriteLine("answerswers " + i + " " + answersList[x].answer);
}
}
aList.Add(i, populate[i]);
}
这是通过在每次需要存储新的问题答案时创建new List<string>
来实现的。然后,这些答案字符串可以存储在数组的那个元素中。每次将问题答案添加到数组中时,我都会将该元素添加到我的List<List<string>>
中。
然后在视图中,这一行代码不需要更改。
@Html.DropDownListFor(model => model.answers[i].Answers, new SelectList(Model.hold[i]))