문제

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)
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top