下拉列表的动态列表

时间:2014-07-23 18:24:10

标签: c# asp.net-mvc-4 razor

我正在开发我的第一个MVC项目,我想看看是否有更好的方法来做到这一点。我很确定有。

我正在构建一个审核应用程序。每个审核都有一个问题列表,每个问题都有一个可供选择的选项列表。问题和选项可能会改变。因此,我必须使用问题的选项动态构建问题表和下拉列表。

以下是我在控制器中创建SelectLists的方法

foreach (var r in employeeAuditData.Audit.AuditResults)
{
    ViewData["Result" + r.AuditQuestionID] =
       new SelectList(r.AuditQuestion.QuestionOptions, "QuestionOptionID", "OptionText", r.QuestionOption);
}

这是我的观点代码

foreach (var r in Model.Audit.AuditResults.OrderBy(r => r.AuditQuestion.Ordinal).ToList())
{
    <tr>
        <td>@r.AuditQuestion.QuestionText</td>
        <td>@Html.DropDownList("Result" + r.AuditQuestionID, "(Select)")</td>
    </tr>
}

这样可行,但使用ViewData键的连接似乎是一种时髦的方法。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

制作ViewModel怎么样?

class AuditResultSelectList
{
    int QuestionId { get; set;}
    SelectList QuestionOptions { get; set;}
}

然后在你的控制器中:

List<AuditResultSelectList> list = new List<AuditResultSelectList>();

foreach (var r in employeeAuditData.Audit.AuditResults)
{
    AuditResultSelectList a = new AuditResultSelectList()
    {
        QuestionId = r.AuditQuestionID,
        QuestionOptions = new SelectList(r.AuditQuestion.QuestionOptions, "QuestionOptionID", "OptionText", r.QuestionOption)
    }

    list.Add(a);
}

ViewData["QuestionSelectLists"] = list;

然后您的视图可以使用以下方式删除列表:

var x = (List<AuditResultSelectList>) ViewData["QuestionSelectLists"];