IModelBinder personalizada y acceso a la base de datos
-
18-09-2019 - |
Pregunta
Para un objeto de usuario en mi proyecto asp.net mvc, he escrito un modelbinder personalizada para comprobar si las contraseñas son válidas y si se introducen dos contraseñas adecuadas etc ..
El nombre de usuario debe ser único, sin embargo, me preguntaba si puedo comprobar para que en el modelbinder, o esto es considerado como una mala práctica?
Lo que pasa es que el aglutinante se llama incluso antes de llegar al controlador, por lo que tendría dos instancias de mis DataContext que flotan alrededor y por lo tanto múltiples conexiones a la base de datos, supongo que podría establecer una fábrica de las clases para que .
Este es un fragmento de código de lo que hago ahora en el 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 }
}
Solución
Yo no comprobar la disponibilidad de nombre de usuario en la carpeta de modelo. Creo que es el trabajo del método CreateUser
de hacerlo en este caso.
Así que la acción sería de esta manera:
// 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)
}