You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MVC视图中生成以TBL_UserFunction名称为标题的TBL_User下拉列表

实现MVC Create视图动态生成对应TBL_UserFunction的下拉列表

我来给你梳理下实现这个需求的具体步骤,咱们一步步来搞定:

第一步:调整Controller代码

首先我们需要在Controller里准备好两个关键数据:所有的用户功能列表(用来生成下拉的标题),以及所有用户的下拉选项数据源(每个下拉都复用这个列表)。修改后的代码如下:

public ActionResult Create() {
    // 获取所有用户数据,生成通用的下拉选项列表
    var allUsers = db.TBL_User.ToList();
    ViewBag.UserOptions = new SelectList(allUsers, "UserID", "Name");
    
    // 获取所有用户功能数据,用于动态生成下拉组
    ViewBag.AllUserFunctions = db.TBL_UserFunction.ToList();
    
    // 保留你原来需要的Roles数据(如果业务上还需要的话)
    ViewBag.Roles = new SelectList(db.TBL_Profile.ToList(), "ProfileID", "ProfileName");
    
    return View();
}

第二步:修改Create视图代码

接下来把原来的硬编码下拉替换成循环遍历的动态生成逻辑,每个用户功能对应一个下拉列表,标题用功能的Name字段:

@* 遍历所有用户功能,动态生成下拉组 *@
@foreach (var func in ViewBag.AllUserFunctions)
{
    <div class="row form-group">
        @* 用用户功能的Name作为下拉的标签 *@
        @Html.Label(func.Name, new { @class = "control-label col-md-2" })
        <div class="col-md-3">
            @* 生成唯一命名的下拉列表,用FunctionID区分,方便后端接收数据 *@
            @Html.DropDownList($"SelectedUser_{func.FunctionID}", (SelectList)ViewBag.UserOptions, "请选择用户")
        </div>
    </div>
}

进阶建议:用ViewModel替代ViewBag(更规范)

如果你的项目追求更清晰的架构和类型安全,推荐创建一个ViewModel来传递数据,避免ViewBag的弱类型问题:

1. 创建ViewModel类

public class UserFunctionCreationViewModel
{
    // 所有用户功能列表
    public List<TBL_UserFunction> UserFunctions { get; set; }
    // 用户下拉选项的数据源
    public SelectList UserSelectOptions { get; set; }
    // 保留原来的角色列表(如果需要)
    public SelectList ProfileRoles { get; set; }
}

2. 修改Controller传递ViewModel

public ActionResult Create() {
    var viewModel = new UserFunctionCreationViewModel();
    
    viewModel.UserFunctions = db.TBL_UserFunction.ToList();
    
    var allUsers = db.TBL_User.ToList();
    viewModel.UserSelectOptions = new SelectList(allUsers, "UserID", "Name");
    
    viewModel.ProfileRoles = new SelectList(db.TBL_Profile.ToList(), "ProfileID", "ProfileName");
    
    return View(viewModel);
}

3. 调整视图为强类型

在视图顶部指定强类型模型:

@model YourNamespace.UserFunctionCreationViewModel

然后修改循环逻辑:

@foreach (var func in Model.UserFunctions)
{
    <div class="row form-group">
        @Html.Label(func.Name, new { @class = "control-label col-md-2" })
        <div class="col-md-3">
            @Html.DropDownList($"SelectedUser_{func.FunctionID}", Model.UserSelectOptions, "请选择用户")
        </div>
    </div>
}

这样代码的可读性和可维护性都会更好,也能避免后期因为ViewBag命名错误导致的问题。

内容的提问来源于stack exchange,提问作者Pedro Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:59:40