【发布时间】:2020-12-28 19:53:24
【问题描述】:
我有以下类被用作 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;
我已经尝试通过反射来更改消息,但微软不推荐或支持这种方式 https://github.com/dotnet/aspnetcore/issues/25611
有什么办法让它工作吗?我想到了字符串替换,但我不确定如何为我的 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
}
感谢您的帮助! PS:Blazor 摇滚!
【问题讨论】:
-
是的 Blazor 摇滚 :) 你试过FluentValidation 吗?并将 this 与 Blazor 一起使用
-
FluentValidation 会拯救你。
标签: c# validation asp.net-core blazor blazor-server-side