gpt4 book ai didi

c# - Blazor 触发自定义验证消息

转载 作者:行者123 更新时间:2023-12-04 13:33:04 24 4
gpt4 key购买 nike

我有以下类,它被用作 Blazor 服务器端应用程序中 EditForm 的输入模型。

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 的模型列表。这是这个模型:
public class AnsprechpartnerInput
{
public string? Kundennummer { get; set; }
public int Nummer { get; } = -1;
[MaxLength(60)]
[Required]
public string Vorname { get; set; } = String.Empty;
[MaxLength(60)]
[Required]
public string Nachname { get; set; } = String.Empty;
[MaxLength(40)]
[Required]
public string? Bereich { get; set; }
/ * More properties */
}
验证工作正常。但是,一旦我的列表中有多个无效的 AnsprechpartnerInput 模型,ValidationSummary 就会变得一团糟。因为它显示例如5 次字段 xyz 无效。
我知道我可以使用 ErrorMessage 属性设置自定义消息,但我无法在此消息中使用模型中的其他属性。
我想要实现的是:
[Required(ErrorMessage = $"Vorname of {Kundennummer} is required")]
public string Vorname { get; set; } = String.Empty;
我已经尝试通过反射更改消息,但根据 Microsoft 的说法,不推荐或不支持这种方式
https://github.com/dotnet/aspnetcore/issues/25611
有没有办法让它工作?我想到了字符串替换,但我不确定如何为我的 ValidationMessage 找出正确的模型。
还有什么方法可以通过一个来验证列表中的项目并获得 bool 结果?假设我想实现这一目标:
@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
}
谢谢你的帮助!
PS:Blazor 摇滚!

最佳答案

您应该使用自定义验证属性,您可以在其中显式添加您想要的任何错误消息

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;
结果 :
验证摘要:
enter image description here

关于c# - Blazor 触发自定义验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63827607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com