C# Blazor触发器自定义验证消息
我有一个类,它被用作Blazor服务器端应用程序中EditForm的输入模型C# Blazor触发器自定义验证消息,c#,validation,asp.net-core,blazor,blazor-server-side,C#,Validation,Asp.net Core,Blazor,Blazor Server Side,我有一个类,它被用作Blazor服务器端应用程序中EditForm的输入模型 public class KundeInput { [ValidateComplexType] public List<AnsprechpartnerInput> Ansprechpartner { get; } = new List<AnsprechpartnerInput>(); public string? Kundennummer { get; }
public class KundeInput
{
[ValidateComplexType]
public List<AnsprechpartnerInput> Ansprechpartner { get; } = new List<AnsprechpartnerInput>();
public string? Kundennummer { get; }
[Required]
[MaxLength(60)]
public string Firma { get; set; } = String.Empty;
[MaxLength(60)]
public string? Name2 { get; set; }
[MaxLength(60)]
public string? Name3 { get; set; }
}
验证工作正常。但是,一旦我的列表中有多个无效的AnsprechpartnerInput模型,ValidationSummary就会变得一团糟。因为它显示例如5次,所以字段xyz无效
我知道我可以用ErrorMessage属性设置自定义消息,但在这个消息中我无法使用模型中的其他属性
我想要实现的是:
[Required(ErrorMessage = $"Vorname of {Kundennummer} is required")]
public string Vorname { get; set; } = String.Empty;
我已经尝试通过反射更改消息,但根据Microsoft的要求,不建议或不支持这种方式
有办法让它工作吗?我想到了字符串替换,但我不确定如何为ValidationMessage找到正确的模型
还有什么方法可以逐个验证列表中的项目并得到布尔结果?比方说,我想实现这一目标:
@foreach (var ansprechpartner in Input.Ansprechpartner)
{
if (Input.SelectedAnsprechpartner is null)
Input.SelectedAnsprechpartner = ansprechpartner;
<a @onclick="() => Input.SelectedAnsprechpartner = ansprechpartner"
class="@GetNavListClass(Input.SelectedAnsprechpartner == ansprechpartner)"
id="list-ansprechpartner-tab-@(ansprechpartner.Nummer)"
data-toggle="list"
href="#list-ansprechpartner-@(ansprechpartner.Nummer)"
role="tab"
aria-controls="@(ansprechpartner.Nummer)">
@((MarkupString)(ansprechpartner.Nummer < 0 ? "<span class=\"font-weight-bold\">NEU</span>" : $"({ansprechpartner.Nummer})")) @ansprechpartner.Vorname @ansprechpartner.Nachname
</a>
// When the model ansprechpartner is invalid, I want to display an icon
}
@foreach(Input.ansprechpartner中的var ansprechpartner)
{
if(Input.SelectedAnsprechpartner为空)
Input.SelectedAnsprechpartner=ansprechpartner;
//当模型ansprechpartner无效时,我想显示一个图标
}
谢谢你的帮助!
附言:布拉佐岩石 应该使用自定义验证属性,在该属性中可以显式添加所需的任何错误消息
public class KundennummerValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var model = (AnsprechpartnerInput)validationContext.ObjectInstance;
if(string.IsNullOrEmpty((string)value))
{
return new ValidationResult($"Vorname of {model.Kundennummer} is required", new[] { "Kundennummer" });
}
return ValidationResult.Success;
}
}
然后使用
[KundennummerValidation]
public string Vorname { get; set; } = String.Empty;
结果:
验证摘要:
是的,Blazor rocks:)你试过了吗?与BlazorFluentValidation一起使用将节省您的时间。
[KundennummerValidation]
public string Vorname { get; set; } = String.Empty;