Razor/MVC 空列表验证



我有一个 ID 的选择列表,用户可以在List中选择零多个项目。默认情况下,验证逻辑似乎至少需要一个元素。我尝试使用注释[MinLength(0)]因为各种文档暗示它不仅适用于字符串,还适用于集合/列表。

我的问题的明显答案是禁用属性验证。

稍微不太明显的答案是编写我自己的自定义ValidationAttribute这似乎比保证的要多

。我正在寻找是否有另一种简单的方法。

我的视图模型属性:

public List<int> DiverIDList { get; } = new List<int>();

我的 CSHTML:

@{
var DiverSL = (SelectList)ViewData["DiverSL"];
}
<div class="form-group">
<label asp-for="DiverIDList" class="control-label"></label>
<select asp-for="DiverIDList" class="form-control"
asp-items="@DiverSL" size="8">
<option value="">-- Select Divers --</option>
</select>
<span asp-validation-for="DiverIDList" class="text-danger" />
</div>

为了更好地理解这个问题,我决定创建一个从RequiredAttribute派生的自定义ValidationAttribute。尽管我能够验证我的新验证属性的IsValid是否被调用,但仍存在ICollection.Count == 0导致无法调用自定义验证并且服务器ModelState包含错误的情况。在这种情况下,框架中的某些内容绕过了基于属性的验证。

因为我启用了可为空,所以我尝试了使List可为空或不可为空的不同组合。 行为没有变化。

唯一可行的解决方案似乎是禁用对该属性的验证。这需要两个步骤:

  1. 在 OnPost 方法中,在调用ModelState.IsValid之前插入对ModelState.Remove("ModelDiver.DiverIDList");的调用
  2. 在 CSHTML 中,将data-val="false"添加到<select>标记。

相关内容

  • 没有找到相关文章