I have this error when fire UpdateRow inline Edit
System.InvalidOperationException: Cannot find component with Name Text
at Radzen.Blazor.ValidatorBase.ValidateModel(Object sender, ValidationRequestedEventArgs args)
at Microsoft.AspNetCore.Components.Forms.EditContext.Validate()
at Radzen.Blazor.RadzenDataGrid`1.UpdateRow(TItem item)
korchev
September 21, 2023, 3:14pm
2
HI @Maverick1983 ,
Please check the forum FAQ for tips how to improve your question.
This is my code:
@using Microsoft.EntityFrameworkCore
@using FlashSite.Data
@using System.Linq.Dynamic.Core
@inject CandidatiDBContext dbContext
@inject NavigationManager Navigator
@inject Utente utente
@inject DialogService DialogService
@page "/"
<PageTitle>Index</PageTitle>
@if (utente?.Username != null)
{
isVisible = true;
<h1>Ciao: @utente.Username</h1>
<!--Disabled=@(candidatoToInsert != null || candidatoToUpdate != null) -->
<RadzenButton ButtonStyle="ButtonStyle.Success" Icon="add_circle_outline" class="mt-2 mb-4" Text="Aggiungi nuovo candidato" Click="@InsertRow" Disabled=true />
}
else
{
isVisible = false;
<h1>Buongiorno</h1>
<p>Benvenuto nel nuovo sito: @Navigator.BaseUri</p>
}
<div class="row">
<div class="col-lg">
<RadzenDataGrid @ref="candidatoGrid" AllowMultiColumnSorting="true" ColumnWidth="200px"
EmptyText="Nessun dato trovato"
ShowEmptyMessage="true"
AllowFiltering="true"
AllowColumnResize="true"
AllowAlternatingRows="true"
FilterMode="FilterMode.Advanced"
AllowSorting="true"
PageSize="25"
AllowPaging="true"
PagerHorizontalAlign="HorizontalAlign.Left"
ShowPagingSummary="true"
Data="@candidati"
TItem="Candidato"
LogicalFilterOperator="LogicalFilterOperator.Or"
RowUpdate="@OnUpdateRow" RowCreate="@OnCreateRow" Sort="@Reset" Page="@Reset" Filter="@Reset" RowRender="@RowRender"
RowExpand="RowExpand" ExpandMode="DataGridExpandMode.Multiple">
<Template Context="candidati">
<RadzenDataGrid AllowColumnResize="true" AllowFiltering="true" AllowPaging="true" AllowSorting="true" Data="@candidati.Richieste" TItem="Richiesta">
<Columns>
<RadzenDataGridColumn TItem="Richiesta" Filterable="false" Sortable="false" TextAlign="TextAlign.Left">
<Template>
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click=@(args => ChiudiRichiesta())>
</RadzenButton>
</Template>
<EditTemplate>
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click=@((args) => ChiudiRichiesta())>
</RadzenButton>
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click=@((args) => ChiudiRichiesta())>
</RadzenButton>
</EditTemplate>
</RadzenDataGridColumn>
<!--Button for Evaso=true-->
<RadzenDataGridColumn TItem="Richiesta" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Width="40px">
<Template>
<RadzenButton Icon="assignment_ind" Text="Chiudi Richiesta" ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Flat" Size="ButtonSize.Medium" Click=@(() => ChiudiRichiesta()) />
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Richiesta" Property="EmailRichiedente" Title="E-mail Richiedente" Width="40px" />
<RadzenDataGridColumn TItem="Richiesta" Property="Colloquio" Title="Colloquio" Width="30px" />
<RadzenDataGridColumn TItem="Richiesta" Property="Evaso" Title="Evaso" Width="30px" />
</Columns>
</RadzenDataGrid>
</Template>
<Columns>
<RadzenDataGridColumn TItem="Candidato" Property="Id" Title="id" Width="50px" Filterable="false" Frozen="true" />
<RadzenDataGridColumn TItem="Candidato" Property="Nome" Title="Nome" Filterable="false" Frozen="true" Width="65px">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Nome" Style="width:100%; display: block" Name="Nome" />
<RadzenRequiredValidator Text="Nome is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Nomi" Title="Nome" Filterable="false" Frozen="true" Visible="@isVisible">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Nomi" Style="width:100%; display: block" Name="Nomi" />
<RadzenRequiredValidator Text="Nomi is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Ruolo" Title="Ruolo">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Ruolo" Style="width:100%; display: block" Name="Ruolo" />
<RadzenRequiredValidator Text="Ruolo is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Eta" Title="EtĂ " Width="75px">
<EditTemplate Context="candidato">
<RadzenNumeric @bind-Value="candidato.Eta" Style="width:100%; display: block" Name="EtĂ " />
<RadzenRequiredValidator Text="Eta is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Seniority" Title="Seniority">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Seniority" Style="width:100%; display: block" Name="Seniority" />
<RadzenRequiredValidator Text="Seniority is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Sede" Title="Sede">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Sede" Style="width:100%; display: block" Name="Sede" />
<RadzenRequiredValidator Text="Sede is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Skill" Title="Skill">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Skill" Style="width:100%; display: block" Name="Skill" />
<RadzenRequiredValidator Text="Skill is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Lingue" Title="Lingue">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Lingue" Style="width:100%; display: block" Name="Lingue" />
<RadzenRequiredValidator Text="Lingue is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Disponibilita" Title="DisponibilitĂ ">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Disponibilita" Style="width:100%; display: block" Name="DisponibilitĂ " />
<RadzenRequiredValidator Text="DisponibilitĂ is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="Tipo" Title="Tipo" Width="75px" Visible="@isVisible">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.Tipo" Style="width:100%; display: block" Name="Tipo" />
<RadzenRequiredValidator Text="Tipo is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="Candidato" Property="site" Title="Site" Visible="@isVisible">
<EditTemplate Context="candidato">
<RadzenTextBox @bind-Value="candidato.site" Style="width:100%; display: block" Name="Site" />
<RadzenRequiredValidator Text="Site is required" Component="Text" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
<!--Button for Edit and Delete-->
<RadzenDataGridColumn TItem="Candidato" Context="candidati" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Visible="@isVisible">
<Template Context="candidato">
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditRow(candidato))" @onclick:stopPropagation="true">
</RadzenButton>
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(candidato))" @onclick:stopPropagation="true">
</RadzenButton>
</Template>
<EditTemplate Context="candidato">
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SaveRow(candidato))">
</RadzenButton>
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelEdit(candidato))">
</RadzenButton>
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(candidato))">
</RadzenButton>
</EditTemplate>
</RadzenDataGridColumn>
<!--Button for send e-mail-->
<RadzenDataGridColumn TItem="Candidato" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Visible="@(!isVisible)">
<Template Context="candidato">
<RadzenButton Icon="assignment_ind" Text="Richiedi CV" ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => ShowInlineDialog(candidato))">
</RadzenButton>
</Template>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</div>
</div>
@code {
RadzenDataGrid<Candidato> candidatoGrid;
IEnumerable<Candidato> candidati;
Candidato candidatoToInsert;
Candidato candidatoToUpdate;
Candidato _candidatoRichiestaCV;
string _emailRichiedente;
bool isVisible;
void Reset()
{
candidatoToInsert = null;
candidatoToUpdate = null;
}
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
if (utente?.Username == null)
{
Uri _uri = new Uri(Navigator.BaseUri);
if (_uri.Host.ToString() == "localhost") {
candidati = dbContext.Candidato.ToList();
}
else
{
string _site = _uri.Authority.Split(".")[0];
candidati = dbContext.Candidato.Where(x => x.site.Contains(_site)).ToList();
}
}
else
{
candidati = dbContext.Candidato.Include("Richieste").OrderByDescending(x => x.Richieste.Any());
}
}
async Task EditRow(Candidato candidato)
{
candidatoToUpdate = candidato;
await candidatoGrid.EditRow(candidato);
}
void OnUpdateRow(Candidato candidato)
{
Reset();
dbContext.Update(candidato);
dbContext.SaveChanges();
}
async Task SaveRow(Candidato candidato)
{
await candidatoGrid.UpdateRow(candidato);
}
void CancelEdit(Candidato candidato)
{
Reset();
candidatoGrid.CancelEditRow(candidato);
var orderEntry = dbContext.Entry(candidato);
if (orderEntry.State == EntityState.Modified)
{
orderEntry.CurrentValues.SetValues(orderEntry.OriginalValues);
orderEntry.State = EntityState.Unchanged;
}
}
async Task DeleteRow(Candidato candidato)
{
Reset();
if (candidati.Contains(candidato))
{
dbContext.Remove<Candidato>(candidato);
dbContext.SaveChanges();
await candidatoGrid.Reload();
}
else
{
candidatoGrid.CancelEditRow(candidato);
await candidatoGrid.Reload();
}
}
async Task InsertRow()
{
candidatoToInsert = new Candidato();
await candidatoGrid.InsertRow(candidatoToInsert);
}
void OnCreateRow(Candidato candidato)
{
dbContext.Add(candidato);
dbContext.SaveChanges();
candidatoToInsert = null;
}
async Task ShowInlineDialog(Candidato candidato)
{
_candidatoRichiestaCV = candidato;
var result = await DialogService.OpenAsync("Richiesta CV", ds =>
@<div>
<p>Candidato: @candidato.Id</p>
<form class="row g-3" @onsubmit="InviaRichiestaCV">
<div class="mb-3">
<input type="email" class="form-control" id="txtemail" placeholder="name@example.com" required @bind="_emailRichiedente">
</div>
<div class="col-12">
<button class="btn btn-primary">Invia Richiesta</button>
<button class="btn btn-danger" @onclick="() => ds.Close(false)">Annulla</button>
</div>
</form>
</div>
);
}
async void InviaRichiestaCV()
{
#pragma warning disable CS4014
InvokeAsync(async () =>
{
dbContext.Richiesta.Add(new Richiesta
{
CandidatoId = _candidatoRichiestaCV.Id,
EmailRichiedente = _emailRichiedente,
Evaso = false,
DataInserimento = DateTime.Now
});
dbContext.SaveChanges();
var app = new InviaRichiesta(_emailRichiedente, _candidatoRichiestaCV);
BusyDialog("Richiesta inviata");
await Task.Delay(2000);
DialogService.Close(); //Dialog richiesta e-mail
DialogService.Close(); //Dialog Invio in Corso
DialogService.Close(); //Dialog Richiesta Inviata
});
#pragma warning restore CS4014
await BusyDialog("Invio in Corso...");
}
async Task BusyDialog(string testo)
{
await DialogService.OpenAsync("", ds =>
{
RenderFragment content = b =>
{
b.OpenElement(0, "RadzenRow");
b.OpenElement(1, "RadzenColumn");
b.AddAttribute(2, "Size", "12");
b.AddContent(3, testo);
b.CloseElement();
b.CloseElement();
};
return content;
}, new DialogOptions() { ShowTitle = false, Style = "min-height:auto;min-width:auto;width:auto", CloseDialogOnEsc = false });
}
void RowRender(RowRenderEventArgs<Candidato> args)
{
args.Expandable = utente?.Username != null && args.Data.Richieste?.Count() > 0;
}
void RowExpand(Candidato candidato)
{
if (candidato.Richieste == null)
{
candidato.Richieste = dbContext.Richiesta.Where(o => o.CandidatoId == candidato.Id).ToList();
}
}
async Task ChiudiRichiesta()
{
await Task.CompletedTask;
}
}
When I Edit inline and Save, I have this error and row not update
System.InvalidOperationException: Cannot find component with Name Text
at Radzen.Blazor.ValidatorBase.ValidateModel(Object sender, ValidationRequestedEventArgs args)
at Microsoft.AspNetCore.Components.Forms.EditContext.Validate()
at Radzen.Blazor.RadzenDataGrid`1.UpdateRow(TItem item)
korchev
September 21, 2023, 6:59pm
4
The Component
attribute of every validator is wrong. It should be set to the Name
of the component it validates.
1 Like