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的索引,我可以看到该列表的每个元素都包含所有答案。

DropDownList用于显示List<;列表<;字符串>>;

经过多次尝试和错误,我找到了解决这个问题的方法。我最终使用了一个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]))