사용자 정의 IMODELBINDER 및 데이터베이스 액세스
-
18-09-2019 - |
문제
ASP.NET MVC 프로젝트의 사용자 객체의 경우 암호가 유효한지 여부와 두 개의 일치하는 암호가 입력되었는지 여부를 확인하기 위해 사용자 정의 모델 바인더를 작성했습니다.
로그인 이름은 독특해야합니다. ModelBinder에서이를 확인할 수 있는지 궁금합니다. 아니면 나쁜 연습으로 간주됩니까?
문제는 컨트롤러에 도착하기 전에 바인더가 호출되므로 데이터 컨텍스트의 두 가지 인스턴스가 떠 다니고 데이터베이스에 여러 개의 연결을 할 것입니다.
이것은 컨트롤러에서 지금하는 일에 대한 코드 스 니펫입니다.
// POST: /Users/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Users user)
{
myDataContext db = new myDataContext();
if (!ViewData.ModelState.IsValid)
{
return View(user);
}
Users testUser = db.Users.SingleOrDefault(p => p.LoginNaam == user.LoginNaam);
if (testUser != null) { //Error stuff here }
}
해결책
모델 바인더에서 사용자 이름 가용성을 확인하지 않습니다. 나는 그것이 CreateUser
이 경우 방법을 수행하는 방법.
그래서 행동은 다음과 같습니다.
// POST: /Users/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Users user)
{
myDataContext db = new myDataContext();
if (!ViewData.ModelState.IsValid)
{
return View(user);
}
try {
db.CreateUser(User);
}
catch (ArgumentException e) {
ModelState.AddModelError(e.ParamName, e.Message);
return View(user);
}
return View("UserCreated", user)
}
제휴하지 않습니다 StackOverflow