065a83442c
Enhanced the application's service layer by adding FormValidationService and EventDefinitionService to the dependency injection container in Program.cs. Updated Create, Edit, and other relevant components to utilize these services for improved form validation and event processing functionality.
110 lines
4.0 KiB
Plaintext
110 lines
4.0 KiB
Plaintext
@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
|
|
|
|
<PageHeader
|
|
Title="Create"
|
|
Subtitle="Student"
|
|
ShowBackButton="true"
|
|
BackButtonUrl="@(ReturnUrl ?? "/students")" />
|
|
|
|
<EditForm EditContext="@_editContext" OnValidSubmit="OnValidSubmit" OnInvalidSubmit="OnInvalidSubmit" Enhance>
|
|
<FormChangeTracker @ref="_formChangeTracker" />
|
|
<AntiforgeryToken />
|
|
<DataAnnotationsValidator />
|
|
|
|
<ValidationErrorDisplay Errors="_validationErrors" />
|
|
|
|
<MudPaper Elevation="2" Class="pa-6">
|
|
<MudText Typo="Typo.h5" Class="mb-4">Student Information</MudText>
|
|
<MudGrid Spacing="3">
|
|
<MudItem xs="12" sm="6">
|
|
<MudTextField T="string" Label="First Name" @bind-Value="Student.FirstName" For="@(() => Student.FirstName)" Variant="Variant.Outlined"></MudTextField>
|
|
</MudItem>
|
|
<MudItem xs="12" sm="6">
|
|
<MudTextField T="string" Label="Last Name" @bind-Value="Student.LastName" For="@(() => Student.LastName)" Variant="Variant.Outlined"></MudTextField>
|
|
</MudItem>
|
|
<MudItem xs="12" sm="6">
|
|
<MudTextField T="string" Label="Email Address" @bind-Value="Student.Email" For="@(() => Student.Email)" Variant="Variant.Outlined"></MudTextField>
|
|
</MudItem>
|
|
<MudItem xs="12" sm="6">
|
|
<MudTextField T="string" Label="Phone Number" @bind-Value="Student.PhoneNumber" For="@(() => Student.PhoneNumber)" Variant="Variant.Outlined"></MudTextField>
|
|
</MudItem>
|
|
<MudItem xs="12" sm="6">
|
|
<MudTextField T="int" Label="Grade" @bind-Value="Student.Grade" For="@(() => Student.Grade)" Variant="Variant.Outlined"></MudTextField>
|
|
</MudItem>
|
|
<MudItem xs="12" sm="6">
|
|
<MudTextField T="int" Label="TSA Year" @bind-Value="Student.TsaYear" For="@(() => Student.TsaYear)" Variant="Variant.Outlined"></MudTextField>
|
|
</MudItem>
|
|
</MudGrid>
|
|
|
|
<FormActions>
|
|
<MudButton ButtonType="ButtonType.Submit" Variant="Variant.Filled" Color="Color.Primary">Create</MudButton>
|
|
<MudButton OnClick="HandleCancel" Variant="Variant.Text">Cancel</MudButton>
|
|
</FormActions>
|
|
</MudPaper>
|
|
</EditForm>
|
|
|
|
@code {
|
|
[SupplyParameterFromQuery]
|
|
private string? ReturnUrl { get; set; }
|
|
|
|
[SupplyParameterFromForm]
|
|
private Student Student { get; set; } = new() { TsaYear = 1 };
|
|
|
|
private FormChangeTracker? _formChangeTracker;
|
|
private EditContext? _editContext;
|
|
private List<string> _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");
|
|
}
|
|
}
|