36.2.4 따라하기 3: 컨트롤러 및 뷰 페이지 만들기

    1. DotNetNote 웹 프로젝트의 Controllers 폴더에 CommunityCampController.cs 파일명으로 컨트롤러를 작성하고 기본 제공 코드를 모두 제거한 후 다시 다음과 같이 코드를 작성한다. 생성자에는 리파지터리 클래스를 사용할 수 있도록 매개 변수로 받는 코드가 들어온다. 생성자 주입을 사용해도 되고, 각각의 인스턴스를 직접 생성해도 된다. 작성한 코드는 가장 일반적으로 사용하는 코드 패턴이다. 생성자 이외에 리스트(Index) 및 등록(Create)과 삭제(Delete) 액션 메서드를 작성한다.

    ▼  Controllers/CommunityCampController.cs

    using DotNetNote.Models;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    
    namespace DotNetNote.Controllers
    {
      public class CommunityCampController : Controller
      {
          private ICommunityCampJoinMemberRepository _repository;
          
          // 인터페이스를 통한 생성자 주입 방식 사용: 
          //     Startup.cs에서 services.AddTransient로 등록됨
          public CommunityCampController(
              ICommunityCampJoinMemberRepository repository)
          {
              _repository = repository;
          }
          
          public IActionResult Index()
          {
              // 모든 데이터 출력
              var list = _repository.GetAll();
              
              return View(list);
          }
     
            [HttpGet]
          public IActionResult Create()
          {
              return View();
          }
     
            [HttpPost]
          public IActionResult Create(CommunityCampJoinMember model)
          {
              // 서버 측 유효성 검사 진행
              if (string.IsNullOrEmpty(model.Email))
              {
                  ModelState.AddModelError(“Email”, “이메일을 입력하시오.”);
              }
              
              if (ModelState.IsValid)
              {
                  ViewBag.Result =
                      $“커뮤니티: {model.CommunityName}, 이름: {model.Name}”;
                  
                  // 저장
                  _repository.AddMember(model);
                  TempData[“Message”] = “데이터가 저장되었습니다.”;
                  
                  return RedirectToAction(“Index”);
              }
              
              return View();
          }
     
            [HttpGet]
          public IActionResult Delete()
          {
              return View();
          }
     
            [HttpPost]
          public IActionResult Delete(CommunityCampJoinMember model)
          {
              if (ModelState.IsValid)
              {
                  // 저장
                  _repository.DeleteMember(model);
                  TempData[“Message”] = “데이터가 삭제되었습니다.”;
                  
                  return RedirectToAction(“Index”);
              }
              
              return View();
          }
          
          // [Authorize]
         // [Authorize(“Administrators”)] // 관리자 아이디로 접근했을 때 볼 수 있음
          public IActionResult ComCampAdmin()
          {
              // 관리자 페이지
              var list = _repository.GetAll();
              
              return View(list);
          }
      }
    }
    

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.