Пользовательский IModelBinder и доступ к базе данных - PullRequest
1 голос
/ 28 апреля 2009

Для пользовательского объекта в моем проекте asp.net mvc я написал специальный связыватель моделей, чтобы проверить, действительны ли пароли и были ли введены два совпадающих пароля и т. Д.

Хотя имя для входа должно быть уникальным, мне было интересно, могу ли я проверить это в связывателе моделей, или это считается плохой практикой?

Дело в том, что механизм связывания вызывается еще до того, как вы доберетесь до контроллера, поэтому у меня будет два экземпляра моего dataContext, плавающих вокруг, и, таким образом, несколько подключений к базе данных, я думаю, я мог бы создать для этого какую-то фабрику .

Это фрагмент кода того, что я сейчас делаю в контроллере:

// 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 }
}

1 Ответ

1 голос
/ 28 апреля 2009

Я бы не проверял наличие имени пользователя в подшивке модели. Я думаю, что в этом случае это задача метода 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)
}
...