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

ASP.NET Core中SelectBox无法显示ViewData字典传递的数据如何解决

问题原因及修复方案

1. 绑定源写法不一致修正

你第一个下拉列表的asp-items属性使用了ViewBag.ProductGroupId取值,虽然ViewBag和ViewData底层共享数据,但动态类型解析存在转换失败的概率,建议统一使用ViewData的显式转换写法:

<!-- 修改前 -->
<select asp-for="@Model.ProductGroupId" class="form-select me-2" asp-items="@(ViewBag.ProductGroupId as SelectList)"></select>

<!-- 修改后 -->
<select asp-for="@Model.ProductGroupId" class="form-select me-2" asp-items="@(ViewData["ProductGroupId"] as SelectList)"></select>

2. 检查SelectList构造参数匹配

确认_productServices.GetGroupsListItem()和GetSubGroups_ByGroupId_ListItem返回的集合元素,必须包含和构造参数完全匹配的Value、Text公共属性,如果是自定义类而非原生SelectListItem,要注意属性名大小写不能出错,否则SelectList会读取不到属性值,生成空下拉。

3. 补充空值预判逻辑

你控制器中直接调用groups.First().Value,如果分组集合为空会直接抛出异常,建议补充空值判断避免隐性错误:

[Microsoft.AspNetCore.Mvc.HttpGet]
public IActionResult Create()
{
    var groups = _productServices.GetGroupsListItem().ToList();
    var subGroups = Enumerable.Empty<SelectListItem>();
    
    if (groups.Any())
    {
        subGroups = _productServices.GetSubGroups_ByGroupId_ListItem(int.Parse(groups.First().Value)).ToList();
    }
    
    ViewData["ProductGroupId"] = new SelectList(groups, "Value", "Text");
    ViewData["ProductSubGroupId"] = new SelectList(subGroups, "Value", "Text");

    return View();
}

4. 检查命名空间引入

确认项目的_ViewImports.cshtml文件中已经引入了Microsoft.AspNetCore.Mvc.Rendering命名空间,否则Razor视图中SelectList的类型转换会失败,导致asp-items拿到空值,无法渲染选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:03