我正在尝试使用@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>>
),以便我可以在populate
的每个元素中存储List<string>
(类型为aList
) 。但是,每个下拉列表最终都会显示aList
的所有元素。
我不确定我是否误用了List<List<string>>
,或者我是否以某种方式在populate
的每个元素中添加了aList
的所有元素。
更新
通过更改Model.hold
中@Html.DropDownListFor(model => model.answers[i].Answers, new SelectList(Model.hold[1]))
的索引,我可以看到此列表中的每个元素都包含所有答案。
答案 0 :(得分:0)
经过多次试验和错误,我已经找到了解决此问题的方法。我最终使用了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("answers " + 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]))