将多个模型属性加入 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");
我有 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");