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

Razor Page使用ViewData绑定CheckBoxList遇空引用等问题求助

问题分析与解决方案

核心错误点

你遇到的空引用异常,根源在于对SelectList的使用方式有误:

  1. 错误调用ToList():直接对SelectList实例调用ToList()是错误的,SelectList本身并非IEnumerable<SelectListItem>的直接实现,必须通过它的Items属性获取选项集合。
  2. 非泛型集合未转换:SelectList.Items是非泛型IEnumerable,直接调用ToList()会得到List<object>,后续访问item.Value、item.Text等属性时会因类型不匹配触发空引用异常。

修正后的Razor代码

<div class="form-group row">
    <div class="col-md-12">
        Select Test: <br />
        @{
            var selectList = ViewData["testSections"] as SelectList;
            if (selectList != null)
            {
                // 将非泛型的Items转换为SelectListItem泛型集合
                var items = selectList.Items.Cast<SelectListItem>();
                if (items.Any())
                {
                    foreach (var item in items)
                    {
                        <input type="checkbox" name="selectedItems" value="@item.Value" /> @item.Text <br />
                    }
                }
            }
        }
    </div>
</div>

更简洁的替代方案(推荐)

跳过SelectList的中间转换,直接将实体集合传入ViewData,避免类型转换问题:

Controller代码修改

public async Task<IActionResult> Index()
{
    var testSections = await _employeeService.GetTestSections();
    ViewData["testSections"] = testSections;
    return View();
}

Razor代码修改

<div class="form-group row">
    <div class="col-md-12">
        Select Test: <br />
        @{
            var testSections = ViewData["testSections"] as List<ReassignmentSectionLookup>;
            if (testSections != null && testSections.Any())
            {
                foreach (var section in testSections)
                {
                    <input type="checkbox" name="selectedItems" value="@section.ReassignmentSectionLookupID" /> @section.Section <br />
                }
            }
        }
    </div>
</div>

额外说明

你原代码中@(Html.Raw(item.Selected ? "checked=\"checked\"" : ""))这段判断无效,因为创建SelectList时未传入选中项参数,item.Selected永远为false,可以直接移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:15:37