@page "/settings/glasses/edit" @page "/settings/glasses/edit/{id}" @using CocktailWeb.Data @using Microsoft.AspNetCore.Components.Sections @using Microsoft.EntityFrameworkCore @using Microsoft.Extensions.Options @inject IDbContextFactory DataContextFactory; @inject NavigationManager nav; @inject IWebHostEnvironment env; @inject IOptions Config;
ml
@if (curGlas.ImageURL != null) { } else {
Kein Bild vorhanden
}
@code { [Parameter] public string? id { get; set; } public Glas curGlas = null!; public IBrowserFile? NewImage; private DbDataContext? _DataContext; private string PrevPageURL = "/settings/glasses"; EditContext? editContext; ValidationMessageStore? valMessages; protected override async Task OnInitializedAsync() { if (id != null) { _DataContext ??= await DataContextFactory.CreateDbContextAsync(); if (_DataContext != null) curGlas = _DataContext.Glasses.Single(f => f.Id == Convert.ToInt32(id)); } curGlas ??= new(); // Falls keine ID angegeben wurde oder der Eintrag in der Datenbank nicht gefunden wurde, gehen wir davon aus dass ein neuer Eintrag erstellt wird. editContext = new(curGlas); editContext.OnValidationRequested += editContext_OnValidationRequested; valMessages = new(editContext); } private void Bild_OnChange(InputFileChangeEventArgs e) { NewImage = e.GetMultipleFiles().FirstOrDefault(); } private void ModifyAmount(int amount) { curGlas.Fuellmenge = Math.Max(curGlas.Fuellmenge + amount, 0); } private void editContext_OnValidationRequested(object? sender, ValidationRequestedEventArgs args) { valMessages?.Clear(); if (curGlas.Fuellmenge <= 0) valMessages?.Add(() => curGlas.Fuellmenge, "Füllmenge muss größer 0 sein!"); } private async Task OnSubmit() { _DataContext ??= await DataContextFactory.CreateDbContextAsync(); if (curGlas != null && _DataContext != null) { if (id != null) { _DataContext.Glasses.Update(curGlas); } else { _DataContext.Glasses.Add(curGlas); } await _DataContext.SaveChangesAsync(); if (NewImage != null) { try { // Bild hochladen var relativeuploadpath = Path.Join(Config.Value.ImageUploadDir, $"glas_{curGlas.Id}{Path.GetExtension(NewImage.Name)}"); var fullpath = Path.Join(env.WebRootPath, relativeuploadpath); string? folder = Path.GetDirectoryName(fullpath); if (folder != null && !Path.Exists(folder)) Directory.CreateDirectory(folder); Stream stream = NewImage.OpenReadStream(maxAllowedSize: Config.Value.MaxAllowedUploadSizeInMB * 1024 * 1024); FileStream fs = File.Create(fullpath); await stream.CopyToAsync(fs); stream.Close(); fs.Close(); curGlas.ImageURL = relativeuploadpath; // URL hinterlegen und wieder speichern _DataContext.Glasses.Update(curGlas); await _DataContext.SaveChangesAsync(); } catch (Exception ex) { Console.WriteLine($"Error uploading image: {ex.Message}"); } } } nav.NavigateTo(PrevPageURL); } }