Program.cs와 Startup.cs가 분리되어 있음MVC란?
- Model: 데이터와 로직 담당 (예: DB에서 불러온 데이터)
- View: 사용자 UI 구성 (HTML 기반)
- Controller: 사용자 요청 처리 및 응답 전달
M : Model -> 데이터 (원자재)
V : View -> UI (인테리어)
C : Controller -> 제어 (사용자 액션 처리)
HelloEmpty 프로젝트에 다음 3개의 폴더 생성:
ModelsViews > HomeControllers📄 HelloMessage.cs
namespace HelloEmpty.Models
{
public class HelloMessage
{
public string Message { get; set; }
}
}
역할: 사용자에게 보여줄 텍스트 메시지를 담는 단순 모델 클래스
📄 HomeController.cs
using HelloEmpty.Models;
using Microsoft.AspNetCore.Mvc;
namespace HelloEmpty.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
HelloMessage msg = new HelloMessage()
{
Message = "Welcome to ASP.NET Core!"
};
ViewBag.Noti = "Input message and click submit";
return View(msg);
}
// POST 요청 처리
[HttpPost]
public IActionResult Index(HelloMessage obj)
{
ViewBag.Noti = "Message Changed";
return View(obj);
}
}
}
설명:
- GET 요청: 기본 메시지를 뷰에 전달
- POST 요청: 사용자가 폼에 입력한 메시지를 다시 전달
📄 Views/Home/Index.cshtml
@model HelloEmpty.Models.HelloMessage
<html>
<head>
<title>Hello MVC!</title>
</head>
<body>
<h1>@Model.Message</h1>
<hr />
<h2>@ViewBag.Noti</h2>
<form asp-controller="Home" asp-action="Index" method="post">
<label asp-for="Message">Enter Message</label>
<br />
<input type="text" asp-for="Message" />
<br />
<button type="submit">Submit</button>
</form>
</body>
</html>
핵심 문법:
@model: 모델 바인딩 선언@Model.Message,@ViewBag.Noti: C# 코드 출력asp-for,asp-controller,asp-action: Razor 문법 (ASP.NET 전용)
📄 Views/_ViewImports.cshtml
@using HelloEmpty
@using HelloEmpty.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
설명: Razor에서
asp-for,asp-controller등을 인식하기 위한 태그 헬퍼 임포트 설정
📄 Program.cs (.NET 8 기준)
var builder = WebApplication.CreateBuilder(args);
// MVC 서비스 등록
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
// 기본 라우팅 설정
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Submit 클릭 시 메시지가 변경되고 아래 메시지가 변경됨:Message Changed