.NET中如何验证无值的List类型模型属性?
解决方案
1. 修正ViewModel的集合元素类型
将Participants的元素类型改为可空int,允许单个下拉框未选择时绑定为null,避免值类型无法解析空选项的问题:
public class CreateViewModel { public string Name { get; set; } public List<IFormFile>? Files { get; set; } // 允许集合为空,且集合内元素可为null public List<int?>? Participants { get; set; } }
2. 调整下拉框的绑定索引
每个下拉框对应集合的一个索引位置,确保模型能正确绑定多个选择项:
<!-- 第1个下拉框 --> <div class="col"> <label asp-for="Participants[0]" class="control-label"></label> <select asp-for="Participants[0]" asp-items="ViewBag.Participants" class="form-control"></select> <span asp-validation-for="Participants[0]" class="text-danger"></span> </div> <!-- 第2个下拉框 --> <div class="col"> <label asp-for="Participants[1]" class="control-label"></label> <select asp-for="Participants[1]" asp-items="ViewBag.Participants" class="form-control"></select> <span asp-validation-for="Participants[1]" class="text-danger"></span> </div> <!-- 以此类推,直到第8个下拉框,索引为7 -->
3. 正确配置空选项的SelectListItem
确保空选项的值为空字符串,配合可空int类型完成绑定:
var emptyItem = new SelectListItem { Text = "请选择", Value = "" }; // 注意指定SelectList的Value和Text字段(假设用户实体的主键是Id,显示名称是Name) ViewBag.Participants = new SelectList(userRepo.getAll().ToList(), "Id", "Name").Append(emptyItem);
4. 明确集合的验证规则(可选)
如果需要限制集合最多8个元素,添加[MaxLength(8)]特性;无需必填则不要加[Required]:
[MaxLength(8)] // 最多8个元素 public List<int?>? Participants { get; set; }
针对Files属性的处理
Files属性只需确保未添加[Required]特性,视图中的文件上传控件默认允许未选择文件,ASP.NET Core会自动处理空文件列表的绑定,不会触发验证错误。
内容的提问来源于stack exchange,提问作者SuperNev
相关产品推荐
相关产品推荐

