Смотрите снимок экрана и необходимые файлы razor и razor.cs ниже:

Файл EditScanner.razor
...
@foreach (var client in _clients)
{
@client.ClientName
}
@if (_sites != null)
{
@foreach (var site in _sites)
{
@site.SiteName
}
}
...
EditScanner.razor.cs
public partial class EditScanner
{
public UpdateScannerModel? Model { get; set; }
private ClientDto _client = new ClientDto();
private List _clients = new List();
private SiteDto _site = new SiteDto();
private List _sites = new List();
private MudSelect? _siteSelect;
private int _selectedSiteId;
Dictionary _loggingLevelMessages;
private MudForm? _form;
protected override async Task OnInitializedAsync()
{
try
{
_loggingLevelMessages = ExtensionMethods.GetEventLoggingLevelMessages();
await GetClients();
// Load scanner data
await LoadScannerById(ScannerId);
// Then get client and sites for this scanner's site
if (Model?.SiteId > 0)
{
var site = await ClientService.GetSiteByIdAsync(Model.SiteId);
if (site != null)
{
_client = await ClientService.GetClientByIdAsync(site.ClientId);
await GetSites(site.ClientId);
}
}
// Set SelectedClientId after data is loaded
if (_client != null)
{
SelectedClientId = _client.ClientId;
await OnValueChanged(SelectedClientId);
}
_isInitialized = true;
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
}
}
public int SelectedClientId
{
get => _client.ClientId;
set
{
if (_client.ClientId == value) return;
_client.ClientId = value;
_client = _clients.FirstOrDefault(c => c.ClientId == value) ?? _client;
//Model.SiteId = _client?.Sites.FirstOrDefault(s => s.SiteId == Model.SiteId)?.SiteId ?? 0;
if (_isInitialized)
{
_ = InvokeAsync(() => OnValueChanged(value));
InvokeAsync(StateHasChanged);
}
}
}
private async Task LoadScannerById(int scannerId)
{
try
{
var scannerDto = await ScannerService.GetScannerByIdAsync(scannerId);
Model = new UpdateScannerModel
{
SiteId = scannerDto.SiteId,
ScannerName = scannerDto.ScannerName,
...
};
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
}
}
private async Task GetClientBySiteId(int? siteId)
{
if (siteId == null) return;
var site = await ClientService.GetSiteByIdAsync(siteId.Value);
if (site != null)
{
_client = await ClientService.GetClientByIdAsync(site.ClientId);
}
}
private async Task OnValueChanged(int clientId)
{
// Clear existing sites and reset selected site first so MudSelect doesn't temporarily show the raw value.
_sites.Clear();
_selectedSiteId = 0;
Model.SiteId = 0;
await InvokeAsync(StateHasChanged);
// Load new sites for selected client.
await GetSites(clientId);
// Ensure the items are rendered before applying a selected value.
await InvokeAsync(StateHasChanged);
// Yield to let the renderer finish (avoids applying the selected value before items exist).
await Task.Yield();
// Select first site if available so the select shows the site's label immediately.
if (_sites.Count > 0)
{
_selectedSiteId = _sites[0].SiteId;
Model.SiteId = _selectedSiteId;
}
else
{
_selectedSiteId = 0;
Model.SiteId = 0;
}
await InvokeAsync(StateHasChanged);
}
private async Task GetClients()
{
_clients = await ClientService.GetClientsAsync();
}
private async Task GetSites(int clientId)
{
_sites = await ClientService.GetSitesByClientIdAsync(clientId);
}
public class UpdateScannerModel
{
public int SiteId { get; set; }
public string ScannerName { get; set; } = string.Empty;
...
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -value-ins
Мобильная версия