c# - 如何对列表类型实体使用 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 个输入的通用格式的验证错误。但我想显示更具体的错误消息,即:如果第一个和第三个输入是重复的,则这两个输入将显示错误,其余部分保持不变。任何想法?
解决方案
这个对我有用。我修改如下:
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;
}
推荐阅读
- c++ - 用OpenGL画一条任意线(即轴范围没有限制)
- android - 使用 RxJava 进行链式改造调用授权和后续调用
- performance - 我在 4 小时内向 Solr7.4 插入大量数据,Solr 查询变得非常慢
- html - 列表组的垂直自动滚动
- excel - 导出列表并将其保存为 .CSV 文件
- firebase - 如何从 Firebase 的 BigQuery 中导出 csv 数据(包括记录类型)
- c++ - 如何打印类方法返回的值
- php - 无法在 Laravel 中检索多个 mysql 查询值
- javascript - 学习 Axios 的先决条件是什么?
- node.js - node.js 从联系我部分发送电子邮件