c# - 下拉列表的动态列表

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

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

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

下面是我如何在 Controller 中创建 SelectLists

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

这是我的 View 代码

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 键使用串联似乎是一种时髦的方法。有没有更好的办法?

最佳答案

制作一个 ViewModel 怎么样?

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

然后在你的 Controller 中:

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;

然后您的 View 可以使用以下方法拉出列表:

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

关于c# - 下拉列表的动态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918070/

相关文章:

asp.net-mvc-4 - Html.BeginForm 在部分 View 中?

C# - 在控制台中显示倒计时器以通过 ReadLine() 进行用户输入

c# - Display 属性中的 ShortName (DataAnnotations)

c# - 通用与非通用重载调用

asp.net-mvc-4 - 尝试访问显示模板中父 View 模型的属性

asp.net-mvc-3 - DropDownListFor 生成 'The name ' 模型“当前上下文中不存在”错误

c# - ASP.NET MVC 4 - Controller 结束后重定向到同一页面

c# - 为什么 Razor 没有将其检测为 ASP.NET MVC 中的代码块?

c# - 用于 IEnumerable ViewModel 的 Razor Html.DisplayNameForInnerType

c# - 如果日期相差一天,则合并列表元素