@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");
}
}