我有一个ID的SelectList,用户可以在List
中选择零个项目。默认情况下,验证逻辑似乎要求至少选择一个元素。我尝试使用批注[MinLength(0)]
,因为各种文档都暗示它不仅适用于字符串,而且适用于集合/列表。
我的问题的明显答案是仅禁用属性验证。
不太明显的答案是编写我自己的自定义ValidationAttribute
,这似乎比需要的工作多。
我正在寻找是否还有另一种简单的方法。
我的ViewModel属性:
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>
为了更好地理解问题,我决定创建一个从ValidationAttribute
派生的自定义RequiredAttribute
。尽管我可以验证新的验证属性的IsValid
被调用了,但是仍然有一些情况ICollection.Count == 0
导致自定义验证没有被调用,并且服务器ModelState
包含错误。在这种情况下,框架中的某些内容会绕过基于属性的验证。
因为启用了Nullable,所以尝试了使List
可为空的不同组合。行为无变化。
唯一可行的解决方案似乎是禁用对该属性的验证。这需要两个步骤:
ModelState.IsValid
之前的OnPost方法中,插入对ModelState.Remove("ModelDiver.DiverIDList");
的调用data-val="false"
添加到<select>
标签。