【发布时间】:2020-10-18 17:59:48
【问题描述】:
我正在尝试为列表数据注释创建所需的自定义验证,但是当输入字段之一为空时,绑定到数据注释的其余输入也会显示错误消息,即使它不为空.
我试图仅向其各自的空输入显示错误。
这是我的看法:
<input name="ListName[0]" type="text" />
<span class="text-danger field-validation-valid" data-valmsg-for="ListName" data-valmsg-replace="true"/>
<input name="ListName[1]" type="text" />
<span class="text-danger field-validation-valid" data-valmsg-for="ListName" data-valmsg-replace="true"/>
<input name="ListName[2]" type="text" />
<span class="text-danger field-validation-valid" data-valmsg-for="ListName" data-valmsg-replace="true"/>
<input name="ListName[3]" type="text" />
<span class="text-danger field-validation-valid" data-valmsg-for="ListName" data-valmsg-replace="true"/>
<input name="ListName[4]" type="text" />
<span class="text-danger field-validation-valid" data-valmsg-for="ListName" data-valmsg-replace="true"/>
这是我的模特
[Display(Name = "Name: ")]
[DataType(DataType.Text)]
[CannotBeEmptyAttribute(ErrorMessage = "Cannot leave name field empty")]
public List<string> ListName{ get; set; }
这是我的自定义验证
public class CannotBeEmptyAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var strings = value as IEnumerable<string>;
foreach (var item in strings)
{
if (item == null)
{
return new ValidationResult("Cannot leave name field empty");
}
}
return ValidationResult.Success;
}
}
【问题讨论】:
-
您的验证器方法似乎不正确,我不知道当您可以使用
[Required(ErrorMessage = "Cannot leave name field empty")]时为什么需要自定义验证器@ -
@derloopkat 嗨,我不能使用 required 因为它是 List
而不是 String -
您在 ListName 上添加自定义 validationAttribute,在 VIew 中,您将相同的验证与 list[0],list[1],list[2]... 绑定,在您的自定义验证中,一个列表的为空,它会失败,所以就像你说的
but when one of the input field is empty, the rest of the input that is bind to the data annotation also shows the error message as well even though its not empty。如果你想验证它们,你也可以使用客户端验证来绑定每个。 -
@YiyiYou 是的,但是对于那些为空的输入应该如何返回错误?我不想在不为空的输入上显示这些错误
-
如果你想使用客户端验证,你可以这样做,
<form method="post"> <label for="id">id:</label> <input type="text" id="id" name="id" required> <label for="id">Username:</label> <input type="text" id="username" name="username" required> <input type="submit"> </form>
标签: asp.net-mvc validation asp.net-core model-view-controller tag-helpers