将多个模型属性加入 1 属性 并为每个属性获取一条错误消息

Join multiple Model properties into 1 property and get one error message for each of them

我有 4 个字符串属性,每个 属性 用于我的 Asp.Net MVC 视图中的每个文本框。 我还有一个 属性 将每个值合并为一个:

public string ModelCode {get{return ProjNr+SerialNr+UserNr+ClientNr}}

所以我想,如果其中一个属性不符合模型要求,则只获取一条错误消息。就像当用户没有输入 ClientNr 而不是收到错误提示 "Client required" 时,它应该显示错误提示 ModelCode 不符合要求。

编辑: ProjNr、SerialNr、UserNr 和 ClientNr 是必需的,它们是字符串。

您可以通过您的模型实现 IValidatableObject class

public class YourModel : IValidatableObject
{
    public string ProjNr { get; set; }
    public string SerialNr { get; set; }
    public string UserNr { get; set; }
    public string ClientNr { get; set; }
    public string ModelCode => $"{ProjNr}{SerialNr}{UserNr}{ClientNr}";
    // ...

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (/*check if ProjNr or other fields not valid*/)
          yield return new ValidationResult(
                  "ModelCode doesn't meet the requirements",
                  new [] {"ModelCode"}); // return only ModelCode member
    }
}

另一个选项(如果你想依赖 DataAnnotation 属性来验证 ProjNr、SerailNr、UserNr 和 ClientNr 而不是手动验证它们 - 你可以在控制器中检查这些属性的验证错误,如果有任何错误则添加新的验证错误发现:

var hasModelCodeErrors = ModelState["ProjNr"].Errors.Any()
    || ModelState["SerialNr"].Errors.Any()
    || ModelState["SerialNr"].Errors.Any()
    || ModelState["ClientNr"].Errors.Any();

if (hasModelCodeErrors)
    ModelState.AddModelError("ModelCode", "ModelCode doesn't meet the requirements");