IModelBinder personalizado e Access Database
-
18-09-2019 - |
Pergunta
Para um objeto de usuário no meu projeto MVC asp.net, eu escrevi um ModelBinder personalizado para verificar se as senhas são válidos e se duas senhas correspondentes foram inseridos etc ..
O nome de login precisa ser embora única, eu queria saber se eu posso verificar que no ModelBinder, ou isso é má prática considerada?
A coisa é que o ligante é chamado antes mesmo de chegar ao controlador, por isso gostaria de ter duas instâncias do meu DataContext flutuando e, assim, múltiplas conexões para o banco de dados, eu acho que eu poderia montar uma fábrica das sortes para que .
Este é um trecho de código do que eu faço agora no controlador:
// 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 }
}
Solução
Eu não verificar a disponibilidade do nome de usuário no fichário de modelo. Eu acho que é o trabalho do método CreateUser
fazer isso neste caso.
Assim, a ação seria assim:
// 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)
}