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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:20:58