Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Blazor validation of List of object

$
0
0

I am trying to validate the fields within an object.I want all the fields to have values, but I am encountering an error when submitting.

System.InvalidOperationException: Could not find property named x on object of type System.Collections.Generic.List`1[[HivrsPlatform.Common.Contracts.Activities.Qwilr.TokenSubstitution, HivrsPlatform.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].  at Blazored.FluentValidation.EditContextFluentValidationExtensions.ToFieldIdentifier(EditContext& editContext, String& propertyPath)  at Blazored.FluentValidation.EditContextFluentValidationExtensions.ValidateModel(EditContext editContext, ValidationMessageStore messages, IServiceProvider serviceProvider, Boolean disableAssemblyScanning, FluentValidationValidator fluentValidationValidator, IValidator validator)  at Blazored.FluentValidation.EditContextFluentValidationExtensions.<AddFluentValidation>b__0.MoveNext()

this is the Test.Razor

@using Blazored.FluentValidation@inherits ComponentBase<MudDialog><DialogContent><EditForm EditContext="_editContext" OnValidSubmit="OnValidSubmit"><FluentValidationValidator @ref="_fluentValidationValidator" Validator="_validator" DisableAssemblyScanning="true"/>            @{                foreach (var item in _items)                {                    var index = _items.IndexOf(item);<MudGrid><MudItem xs="12" sm="6" md="11"><MudGrid><MudItem xs="12" sm="6" md="6"><MudTextField Label="Key" @bind-Value="item.Key" For="@(() => item.Key)" Variant="Variant.Outlined"/></MudItem><MudItem xs="12" sm="6" md="6"><MudTextField Label="Value" @bind-Value="item.Value" For="@(() => item.Value)" Variant="Variant.Outlined"/></MudItem></MudGrid></MudItem><MudItem xs="12" sm="6" md="1" Style="display: flex; justify-items: end; align-items: center;">                            @if (_items.Count > 1)                            {<MudFab Color="Color.Primary" StartIcon="@Icons.Material.Filled.Remove" Size="Size.Small" OnClick="@(() => OnRemoveClicked(item))"/>                            }                            else if (index == _items.Count - 1)                            {<MudFab Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add" Size="Size.Small" OnClick="OnAddClicked"/>                            }</MudItem></MudGrid>                }                @if (_items.Count > 1)                {<MudGrid Justify="Justify.FlexEnd"><MudItem xs="12" sm="6" md="1"><MudFab Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add" Size="Size.Small" OnClick="OnAddClicked"/></MudItem></MudGrid>                }            }</EditForm></DialogContent><DialogActions><MudButton OnClick="OnCancelClicked">Cancel</MudButton><MudButton Color="Color.Primary" OnClick="OnSubmitClicked">Save</MudButton></DialogActions></MudDialog>

this is the Test.razor.cs

public partial class Test{    private EditContext _editContext = default!;    private Validator_validator = default!;    private FluentValidationValidator _fluentValidationValidator = default!;    [Parameter] public List<TokenSubstitution> _items { get; set; } = default!;    [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!;    protected override void OnParametersSet()    {        if (!_items.Any())        {            _items.Add(new TokenSubstitution());        }        _editContext = new EditContext(this);        _validator = new Validator();    }    private async Task OnSubmitClicked()    {        if (!await _fluentValidationValidator.ValidateAsync())            return;        await OnValidSubmit();    }}

this is the Validator.cs

public class Validator: AbstractValidator<List<TokenSubstitution>>{    public QwilrTokenSubstitutionValidator()    {        RuleForEach(x => x).SetValidator(new TokenSubstitutionValidator());    }}public class TokenSubstitutionValidator : AbstractValidator<TokenSubstitution>{    public TokenSubstitutionValidator()    {        RuleFor(x => x.Key)            .NotEmpty().WithMessage("Key is required.")            .MaximumLength(100).WithMessage("Key cannot exceed 100 characters.");        RuleFor(x => x.Value)            .NotEmpty().WithMessage("Value is required.")            .MaximumLength(500).WithMessage("Value cannot exceed 500 characters.");    }}

this is the TokenSubstitution.cs

public class TokenSubstitution{    public string Key { get; set; }    public string Value { get; set; }}

I want all the fields to have values, and show validation message.


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>