Snootalogue/Pages/Documents/Edit.cshtml.cs

70 lines
1.8 KiB
C#

using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Snootalogue.Data;
using Snootalogue.Models;
using Snootalogue.ViewModels;
namespace Snootalogue.Pages.Documents {
public class EditModel : PageModel {
private readonly SnootalogueContext _context;
[BindProperty]
public EditDocument ed { get; set; }
public EditModel(SnootalogueContext context) {
_context = context;
}
public async Task<IActionResult> OnGetAsync(string id) {
if (id == null) {
return NotFound();
}
var Document = await _context.Document.FirstOrDefaultAsync(d => d.ID == id);
if (Document == null) {
return NotFound();
}
ed = new EditDocument {
ID = Document.ID,
Title = Document.Title,
Authors = string.Join(",", Document.Authors),
Category = Document.Category,
Tags = Document.Tags == null ? "" : string.Join(",", Document.Tags),
Read = Document.Read
};
return Page();
}
public async Task<IActionResult> OnPostAsync() {
if (!ModelState.IsValid) {
return Page();
}
Document d = _context.Document.First(d => d.ID == ed.ID);
d.Title = ed.Title;
d.Authors = ed.Authors.Split(",").ToList<string>();
d.Category = ed.Category;
d.Tags = string.IsNullOrWhiteSpace(ed.Tags) ? null : ed.Tags.Split(",").ToList<string>();
d.Notes = ed.Notes;
d.Read = ed.Read;
_context.Attach(d).State = EntityState.Modified;
try {
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException e) {
// TODO: handle it like https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/tutorials/razor-pages/razor-pages-start/sample/RazorPagesMovie30/Pages/Movies/Edit.cshtml.cs#L56
throw e;
}
return RedirectToPage("/Index");
}
}
}