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 }
}
¿Fue útil?

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)
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top