첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ MovieController.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using TestProject.Data;
using TestProject.Models;

namespace TestProject.Controllers
{
    /// <summary>
    /// 영화 컨트롤러
    /// </summary>
    public class MovieController : Controller
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 컨텍스트
        /// </summary>
        private readonly DatabaseContext context;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MovieController(context)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="context">컨텍스트</param>
        public MovieController(DatabaseContext context)
        {
            this.context = context;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 인덱스 페이지 처리하기 - Index()

        /// <summary>
        /// 인덱스 페이지 처리하기
        /// </summary>
        /// <returns>액션 결과 태스크</returns>
        public async Task<IActionResult> Index()
        {
            List<Movie> list = await this.context.Movie.ToListAsync();

            return View(list);
        }

        #endregion
        #region 상세 페이지 처리하기 - Details(id)

        /// <summary>
        /// 상세 페이지 처리하기
        /// </summary>
        /// <param name="id">ID</param>
        /// <returns>액션 결과 태스크</returns>
        public async Task<IActionResult> Details(int? id)
        {
            if(id == null)
            {
                return NotFound();
            }

            Movie movie = await this.context.Movie.FirstOrDefaultAsync(m => m.ID == id);

            if(movie == null)
            {
                return NotFound();
            }

            return View(movie);
        }

        #endregion
        #region 생성 페이지 처리하기 - Create()

        /// <summary>
        /// 생성 페이지 처리하기
        /// </summary>
        /// <returns>액션 결과</returns>
        public IActionResult Create()
        {
            return View();
        }

        #endregion
        #region 생성하기 - Create(movie)

        /// <summary>
        /// 생성하기
        /// </summary>
        /// <param name="movie">영화</param>
        /// <returns>액션 결과 태스크</returns>
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ID,Title,ReleaseDate,Genre,Price")] Movie movie)
        {
            if(ModelState.IsValid)
            {
                this.context.Add(movie);

                await this.context.SaveChangesAsync();

                return RedirectToAction(nameof(Index));
            }

            return View(movie);
        }

        #endregion
        #region 편집 페이지 처리하기 - Edit(id)

        /// <summary>
        /// 편집 페이지 처리하기
        /// </summary>
        /// <param name="id">ID</param>
        /// <returns>액션 결과 태스크</returns>
        public async Task<IActionResult> Edit(int? id)
        {
            if(id == null)
            {
                return NotFound();
            }

            Movie movie = await this.context.Movie.FindAsync(id);

            if(movie == null)
            {
                return NotFound();
            }

            return View(movie);
        }

        #endregion
        #region 편집 페이지 처리하기 - Edit(int id, movie)

        /// <summary>
        /// 편집 페이지 처리하기
        /// </summary>
        /// <param name="id">ID</param>
        /// <param name="movie">영화</param>
        /// <returns>액션 결과 태스크</returns>
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Edit(int id, [Bind("ID,Title,ReleaseDate,Genre,Price")] Movie movie)
        {
            if(id != movie.ID)
            {
                return NotFound();
            }

            if(ModelState.IsValid)
            {
                try
                {
                    this.context.Update(movie);

                    await this.context.SaveChangesAsync();
                }
                catch(DbUpdateConcurrencyException)
                {
                    if(!MovieExists(movie.ID))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }

                return RedirectToAction(nameof(Index));
            }

            return View(movie);
        }

        #endregion
        #region 삭제 페이지 처리하기 - Delete(id)

        /// <summary>
        /// 삭제 페이지 처리하기
        /// </summary>
        /// <param name="id">ID</param>
        /// <returns>액션 결과 페이지</returns>
        public async Task<IActionResult> Delete(int? id)
        {
            if(id == null)
            {
                return NotFound();
            }

            Movie movie = await this.context.Movie.FirstOrDefaultAsync(m => m.ID == id);

            if(movie == null)
            {
                return NotFound();
            }

            return View(movie);
        }

        #endregion
        #region 삭제 완료시 페이지 처리하기 - DeleteConfirmed(id)

        /// <summary>
        /// 삭제 완료시 페이지 처리하기
        /// </summary>
        /// <param name="id">ID</param>
        /// <returns>액션 결과 태스크</returns>
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> DeleteConfirmed(int id)
        {
            Movie movie = await this.context.Movie.FindAsync(id);

            this.context.Movie.Remove(movie);

            await this.context.SaveChangesAsync();

            return RedirectToAction(nameof(Index));
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 영화 존재 여부 구하기 - MovieExists(id)

        /// <summary>
        /// 영화 존재 여부 구하기
        /// </summary>
        /// <param name="id">ID</param>
        /// <returns>영화 존재 여부</returns>
        private bool MovieExists(int id)
        {
            return this.context.Movie.Any(e => e.ID == id);
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요