首页 > 解决方案 > 如何对列表类型实体使用 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 个输入的通用格式的验证错误。但我想显示更具体的错误消息,即:如果第一个和第三个输入是重复的,则这两个输入将显示错误,其余部分保持不变。任何想法?

标签: c#

解决方案


这个对我有用。我修改如下:

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;
        }

推荐阅读