如何在后端验证多个复选框 (Blazor)?

问题描述 投票:0回答:1

在我的剃刀页面中有一个带有 3 个复选框的表单。必须选择一项才能保存提交。 我可以整天对此进行前端验证,但该项目现在需要后端验证。看起来似乎是一项简单的任务,但我被困住了!

在 SQL 中,我将三个布尔值设置为 0。验证必须在提交之前检查其中一个是否为真。 Blazor 代码如下。

PendingModel:

public string CriteriaMessage{get;set;}

public bool checkboxA{ get; set; }
public bool checkboxB{ get; set; }
public bool checkboxC{ get; set; }

PendingViewModel:

[NotMapped]
[Range(typeof(bool), "true", "true", ErrorMessage = "You must select at least one!")]
public bool validateCheckbox
{
    get { return (checkboxA|| checkboxB|| checkboxC); }
}

Pending.razor:
 
<InputTextArea class="" id="" @bind-Value="PendingViewModel.CriteriaMessage" />
<ValidationMessage For = "@(()=>@PendingViewModel.CriteriaMessage)" />

 <InputCheckbox class="" id="" @bind-Value="PendingViewModel.checkboxA" />
 <InputCheckbox class="" id="" @bind-Value="PendingViewModel.checkboxB" />
 <InputCheckbox class="" id="" @bind-Value="PendingViewModel.checkboxC" />
<ValidationMessage For = "@(()=>@PendingViewModel.validateCheckbox)" />

@code{
public void Save(
{
   PendingViewModel = new();
}
}
sql razor checkbox blazor
1个回答
0
投票

我建议对表单使用 FluentValidation。它节省时间,并且可以应用于前端和后端。将您的复选框包装在 DTO 类中。并向您的 blazor 组件添加一个表单。

public class MyModel
{
    public bool CheckboxA { get; set; }
    public bool CheckboxB { get; set; }
    public bool CheckboxC { get; set; }
}
public class MyModelValidator : AbstractValidator<MyModel>
{
    public MyModelValidator()
    {
        RuleFor(x => x)
            .Must(x => x.CheckboxA || x.CheckboxB || x.CheckboxC)
            .WithMessage("At least one checkbox must be checked.");
        //Add your own rules
    }
}

//Usage - Later in a backend

var validator = new MyCheckboxModelValidator();
var results = validator.Validate(myModel);

对于 blazor EditForms,这里是带有示例的库: https://github.com/Blazored/FluentValidation

© www.soinside.com 2019 - 2024. All rights reserved.