Controller > View > _Layout.cshtml 순으로 진행합니다!
먼저 Controller인 AccountController를 만들어 보겠습니다.
using AspnetNote.MVC6.DataContext;
using AspnetNote.MVC6.Models;
using Microsoft.AspNetCore.Mvc;
namespace AspnetNote.MVC6.Controllers
{
public class AccountController : Controller
{
/// <summary>
/// 로그인
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Login()
{
return View();
}
/// <summary>
/// 회원가입
/// </summary>
/// <returns></returns>
public IActionResult Register()
{
return View();
}
[HttpPost]
public IActionResult Register(User model)
{
if (ModelState.IsValid)
{
// Java try(SqlSession) {} catch(){}
// C#
using (var db = new AspnetNoteDbContext())
{
db.Users.Add(model);
db.SaveChanges(); //sql로 저장
}
return RedirectToAction("Index", "Home"); // HomeController에 잇는 index로 Redirect 하겠다!
}
return View(model);
}
}
}
현재 Register는 두 개의 메서드가 보이는데 하나는 GET 방식이고 하나는 [HttpPost]라고 써져있는 POST 방식입니다. 회원 가입을 해야하기 때문에 form에서 입력한 것들을 DB로 전달받아야하기 때문에 POST 방식이 필요합니다.
매개변수로 User의 객체를 전달 받습니다.
그리고 입력한 값들이 모두 유효하면 using 키워드를 이용하여 db에 추가하고 db에 저장합니다.
그리고 추가가되면 HomeController에 있는 Index로 Redirect 되게 logic을 완성했습니다.
Views / Register.cshtml에 form 양식을 만들어보겠습니다.
@model AspnetNote.MVC6.Models.User
<h2>회원가입</h2>
<form class="form-horizontal" method="post" asp-controller="Account" asp-action="Register">
<div class="form-group">
<label>사용자 ID</label>
<input type="text" class="form-control" asp-for="UserId" placeholder="사용자 ID 입력"/>
<span class="text-danger" asp-validation-for="UserId"></span>
</div>
<div class="form-group">
<label>사용자 PW</label>
<input type="password" class="form-control" asp-for="UserPassword" placeholder="사용자 PW 입력" />
<span class="text-danger" asp-validation-for="UserPassword"></span>
</div>
<div class="form-group">
<label>사용자 이름</label>
<input type="text" class="form-control" asp-for="UserName" placeholder="사용자 이름 입력" />
<span class="text-danger" asp-validation-for="UserName"></span>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">회원가입</button>
<a class="btn btn-warning" href="#">취소</a>
</div>
</form>
@model AspnetNote.MVC6.Models.User 을 이용해야 현재 프로젝트에 있는 어느 Model의 User를 사용할 것인지 알려주어야 합니다.
그렇게 해야 각 input에 asp-for로 연결시켜었을 떄 UserId와 UserPassword 등을 적을 수 있습니다!
<form class="form-horizontal" method="post" asp-controller="Account" asp-action="Register">
asp-controller에 있는 AccountController에 asp-action인 Register로 입력된 데이터들을 보내준다는 의미입니다!
input 값들을 입력을 하면
로 넘어와서 db에 저장되고 Home의 Index 화면으로 넘어가게됩니다!
DB에도 잘 들어와있는지 확인이 됩니다!
마지막으로 입력이 안되었을 떄 제출을 하게되면 문구가 나오게 해보겠습니다!
<div class="form-group">
<label>사용자 PW</label>
<input type="password" class="form-control" asp-for="UserPassword" placeholder="사용자 PW 입력" />
<span class="text-danger" asp-validation-for="UserPassword"></span>
</div>
이 구문에서 asp-validation-for로 연결시켜주고
[Required(ErrorMessage = "사용자 비밀번호를 입력하세요.")] // Not Null 설정
public string UserPassword { get; set; }
Not null이 설정되어있는 Required 문에서 ErrorMessage를 내 마음대로 설정하여 표시할 수 있습니다.