// GET: Songs/Edit/5 public async Task <ActionResult> Edit(int?id) { if (!Session.UserHasRole("Admin")) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Song song = await db.Songs.FindAsync(id); if (song == null) { return(HttpNotFound()); } var editVM = new EditSongVM { Id = song.Id, Name = song.Name, Genres = (await db.Genres.ToListAsync()).Select(genre => new SelectedGenre() { Id = genre.Id, IsSelected = song.Genres.FirstOrDefault(g => g.Id == genre.Id) != null, Name = genre.Name }) }; return(View(editVM)); }
public async Task <ActionResult> Edit([Bind(Include = "Id,Name,File,Genres")] EditSongVM songVM) { if (!Session.UserHasRole("Admin")) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } if (ModelState.IsValid) { Song song = await db.Songs.FindAsync(songVM.Id); song.Name = songVM.Name; song.Genres.Clear(); await Task.Run(() => { songVM .Genres .Where(genre => genre.IsSelected) .Select(async genre => await db.Genres.FindAsync(genre.Id)) .Select(t => t.Result) .ToList() .ForEach(genre => song.Genres.Add(genre)); }); if (songVM.File != null) { string songFilePath = Server.MapPath(song.GetVirtualFilePath()); using (FileStream songFileStream = new FileStream(songFilePath, FileMode.Truncate, FileAccess.Write, FileShare.None, 4096, true)) { await songVM.File.InputStream.CopyToAsync(songFileStream); } } await db.SaveChangesAsync(); return(RedirectToAction("All")); } ModelState.AddModelError(String.Empty, "Bad request"); return(View(songVM)); }