Пример #1
0
        // 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));
        }
Пример #2
0
        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));
        }