using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using CoreWiki.Models; using NodaTime; namespace CoreWiki.Pages { public class EditModel : PageModel { private readonly CoreWiki.Models.ApplicationDbContext _context; private readonly IClock _clock; public EditModel(CoreWiki.Models.ApplicationDbContext context, IClock clock) { _context = context; _clock = clock; } [BindProperty] public Article Article { get; set; } = default!; public async Task OnGetAsync(string slug) { var article = await _context.Articles.FirstOrDefaultAsync(m => m.Slug == slug); if (article == null) { return NotFound(); } Article = article; return Page(); } public async Task OnPostAsync() { if (!ModelState.IsValid) { return Page(); } _context.Attach(Article).State = EntityState.Modified; Article.Published = _clock.GetCurrentInstant(); try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ArticleExists(Article.Topic)) { return NotFound(); } else { throw; } } return Redirect($"/{(Article.Slug == "home-page" ? "" : Article.Slug)}"); } private bool ArticleExists(string id) { return (_context.Articles?.Any(e => e.Slug == id)).GetValueOrDefault(); } } }