Пользовательский IModelBinder и доступ к базе данных
-
18-09-2019 - |
Вопрос
Для объекта user в моем проекте asp.net mvc я написал пользовательский modelbinder, чтобы проверить, действительны ли пароли, были ли введены два совпадающих пароля и т.д..
Имя пользователя должно быть уникальным, хотя мне было интересно, могу ли я проверить это в modelbinder, или это считается плохой практикой?
Дело в том, что связующее вызывается еще до того, как вы доберетесь до контроллера, поэтому у меня было бы два экземпляра моего 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 }
}
Решение
Я бы не стал проверять доступность имени пользователя в model binder.Я думаю, что это 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)
}