MultiSelectList调用Append报Value cannot be null错误,求排查解决
问题分析与解决
你遇到的Value cannot be null错误,根源在于**Items属性运行时实际为null**——虽然你用null!抑制了编译器警告,但这个属性并没有被实例化,调用Append方法时自然会因为调用者为空抛出异常。另外,MultiSelectList是不可变类型,它的Items集合是只读的,无法直接通过Append添加元素。
修复后的代码
public MultiSelectList Items { get; set; } = null!; private void ListUploadedFiles() { var uploadPath = Path.Combine(Environment.ContentRootPath, "Upload"); if (Directory.Exists(uploadPath)) { DirectoryInfo di = new DirectoryInfo(uploadPath); savedFiles = di.GetFiles().ToList(); // 先构建SelectListItem集合 var selectItems = new List<SelectListItem>(); foreach (FileInfo file in savedFiles) { selectItems.Add(new SelectListItem(file.Name, file.Name, true)); } // 用集合实例化MultiSelectList Items = new MultiSelectList(selectItems); } else { // 目录不存在时初始化空列表,避免后续空引用 Items = new MultiSelectList(Enumerable.Empty<SelectListItem>()); } }
关键注意点
- 必须实例化
MultiSelectList:null!仅消除编译器警告,运行时属性仍为空,必须通过构造函数传入有效数据源创建实例。 - 不可直接修改
MultiSelectList的Items:它是只读集合,所有选项必须在构造时一次性传入。 - 处理边界场景:当上传目录不存在时,初始化空的
MultiSelectList,避免后续使用时触发空引用异常。
内容的提问来源于stack exchange,提问作者E Mett
相关产品推荐
相关产品推荐

