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

MVC中ProjectRole创建页外键PersonId、ProjectId下拉框无内容问题

问题原因

视图的PersonId、ProjectId下拉框绑定了ViewBag.PersonId、ViewBag.ProjectId作为数据源,但你控制器的GET请求Create方法没有对这两个ViewBag赋值,因此下拉框没有可选项。

解决步骤

1. 修改GET请求的Create方法

从数据库查询已有的人员、项目数据,转换为下拉列表需要的格式存入ViewBag:

// 若代码提示SelectListItem不存在,在控制器顶部添加此引用
using Microsoft.AspNetCore.Mvc.Rendering;

public IActionResult Create()
{
    // 构造人员下拉选项:值存人员ID,显示内容为人员全名
    ViewBag.PersonId = _context.People
        .Select(p => new SelectListItem
        {
            Value = p.Id.ToString(),
            Text = $"{p.FirstName} {p.MiddleName} {p.LastName}"
        })
        .ToList();
    
    // 构造项目下拉选项:值存项目ID,显示内容为项目名称
    ViewBag.ProjectId = _context.Projects
        .Select(p => new SelectListItem
        {
            Value = p.Id.ToString(),
            Text = p.Name
        })
        .ToList();
    
    return View();
}

2. 补充POST请求Create方法的ViewBag赋值

表单提交验证失败返回页面时,需要重新给ViewBag赋值,同时保留用户之前的选择,避免返回页面后下拉框再次为空:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,HourlyRate,PersonId,ProjectId,RoleId")] ProjectRole projectRole)
{
    if (ModelState.IsValid)
    {
        _context.Add(projectRole);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    // 验证失败时重新赋值下拉选项,保留用户已选值
    ViewBag.PersonId = _context.People
        .Select(p => new SelectListItem
        {
            Value = p.Id.ToString(),
            Text = $"{p.FirstName} {p.MiddleName} {p.LastName}",
            Selected = p.Id == projectRole.PersonId
        })
        .ToList();
    
    ViewBag.ProjectId = _context.Projects
        .Select(p => new SelectListItem
        {
            Value = p.Id.ToString(),
            Text = p.Name,
            Selected = p.Id == projectRole.ProjectId
        })
        .ToList();
    return View(projectRole);
}

可选优化

如果RoleId对应有角色字典表,也可以参照上述逻辑把RoleId的输入框改为下拉选择,避免手动输入出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:07