@page "/students/create" @attribute [Authorize] @using WebApp.Components.Shared.Components @using MudBlazor @using WebApp.Services @using Microsoft.EntityFrameworkCore @inject AppDbContext Context @inject NavigationManager NavigationManager @inject ISnackbar Snackbar @inject FormValidationService ValidationService Student Information Create Cancel @code { [SupplyParameterFromQuery] private string? ReturnUrl { get; set; } [SupplyParameterFromForm] private Student Student { get; set; } = new() { TsaYear = 1 }; private FormChangeTracker? _formChangeTracker; private EditContext? _editContext; private List _validationErrors = new(); protected override void OnInitialized() { _editContext = new EditContext(Student); } private void OnInvalidSubmit(EditContext editContext) { _validationErrors = ValidationService.HandleInvalidSubmit(editContext, Student, errors => _validationErrors = errors); StateHasChanged(); } private async Task OnValidSubmit() { _validationErrors.Clear(); try { Context.Students.Add(Student); await Context.SaveChangesAsync(); Snackbar.Add($"Student '{Student.FirstNameLastName}' created successfully.", Severity.Success); _formChangeTracker?.AllowNavigation(); NavigationManager.NavigateTo(ReturnUrl ?? "/students"); } catch (DbUpdateException ex) { ValidationService.HandleDbUpdateException( ex, "An error occurred while creating the student.", "student", "creating"); } catch (Exception ex) { ValidationService.HandleException(ex); } } private void HandleCancel() { _formChangeTracker?.AllowNavigation(); NavigationManager.NavigateTo(ReturnUrl ?? "/students"); } }