【问题标题】:Dropdown list filled from repository从存储库填充的下拉列表
【发布时间】:2011-09-23 20:29:35
【问题描述】:

我有一个来自控制器上此代码的 MVC3 下拉列表。

private SelectList progCodesList = new SelectList(new[] { "Description", "Requirements", "Development", "Testing", "Documentation" });

如何填写存储库中的字段以动态构建下拉列表? 谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 razor repository html.dropdownlistfor


    【解决方案1】:

    假设您在数据库表中有progCodes,progCode 具有文本,progCodeId 具有唯一ID,那么您可以将表读入SelectListItem 列表,如下所示:

    private DbContext _db = new DbContext();
    
    var progCodesList = _db.progCodes.Select(x => new SelectListIem()
        {
            Text = x.progCode,
            value = x.progCodeId
        }).ToList();
    

    然后,您可以在强类型模型中或使用 ViewBag 将这个 List<SelectListItem> 传递给您的视图。

    【讨论】:

    • 我的数据来自通过存储库的 XML 文件,而不是 DbContext。
    • 如果您有一个存储库,您仍然可以使用类似样式的 LINQ 查询来填充您的列表。唯一的区别在于您如何在控制器中实例化存储库实例。
    【解决方案2】:

    您需要使用以下方式将 progCodesList 传递给控制器​​方法中的 ViewBag:

    ViewBag.ProgCodeId = progCodesList;
    

    然后在您看来,您需要像这样填写下拉列表:

        <div class="editor-label">
            @Html.LabelFor(model => model.ProgCodeId, "ProgCode")
        </div>
        <div class="editor-field">
            @Html.DropDownList("ProgCodeId", String.Empty)
            @Html.ValidationMessageFor(model => model.ProgCodeId)
        </div>
    

    【讨论】:

    • 或者为了更安全的替代方案,将其放入强类型视图模型中。
    • 感谢您发布有关强类型视图模型方法的信息。我忘记了。
    猜你喜欢
    • 2014-12-25
    • 2011-11-09
    • 2018-10-03
    • 2016-01-09
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多