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);
}
}
}