如何对列表类型实体使用 RoleForEach() 验证方法?



我有多个输入MobileNo。查看模型:

public class CompanyAccountViewModel
{
public string CompanyName { get; set; }
public float Interval { get; set; }
public List<string> MobileNo { get; set; }
} 

视图:

<div class="form-group row">
@Html.LabelFor(model => model.MobileNo, htmlAttributes: new { @class = "col-sm-2 col-md-1 col-form-label" })
<div class="col-sm-10 col-md-3">
<span class="add-new-icon glyphicon glyphicon-plus-sign" id="add_mobile"> </span>
@for (var i = 0; i < TotalMobiles; i++)
{
@Html.EditorFor(m => m.MobileNo[i], new { htmlAttributes = new { @class = "form-control", @id = "mobile_no" } })
@Html.ValidationMessageFor(model => model.MobileNo[i], "", new { @class = "text-danger" })
}
</div>
</div>

验证规则是:

RuleFor(x => x.MobileNo).Must(IsMobileNoUnique).WithMessage("This Mobile Number Already Exist");

IsMobileNoUnique方法:

public bool IsMobileNoUnique(ICollection<string> mobileNo)
{
IList<Domain.Contacts.Mobile> mobiles = _powerSupplyDBContext.Mobiles.Where(w => mobileNo.Contains(w.MobileNo)).ToList();
if (mobiles.Any())
return false;
return true;
}

这种验证是通常应用的,即:如果我想输入 3 个手机号码,其中 2 个输入是重复的,1 个是唯一的。现在我收到 3 个输入的通用格式的验证错误。但我想显示更具体的错误消息,即:如果第一个和第三个输入是重复的,则这两个输入将显示错误,其余部分保持不变。知道吗?

为什么你不只是使用

get {}

验证声明?

我很抱歉将其作为答案发布,但我还不能发表评论,1 个声誉关闭。

它对我有用。我修改如下:

RuleForEach(x => x.MobileNo).Must(IsMobileNoUnique).WithMessage("This Mobile Number Already Exist");

IsMobileNoUnique

public bool IsMobileNoUnique(string mobileNo)
{
Domain.Contacts.Mobile mobiles = _powerSupplyDBContext.Mobiles.Where(m=>m.MobileNo == mobileNo).FirstOrDefault();
if (mobiles==null)
return true;
return false;
}