IModelBinder personalizzato e Access Database
-
18-09-2019 - |
Domanda
Per un oggetto utente nel mio progetto mvc asp.net, ho scritto una modelbinder personalizzato per verificare se le password sono validi e se due password corrispondenti sono stati iscritti etc ..
Il nome di login deve essere unico, però, mi chiedevo se posso verificare la presenza che nel modelbinder, o si tratta considerato cattiva pratica?
Il fatto è che il legante è chiamato prima di arrivare anche al controllore, quindi vorrei avere due istanze di mio DataContext galleggianti intorno e connessioni dunque più al database, Credo che avrei potuto istituire una fabbrica di sorta per quella .
Questo è un frammento di codice di quello che faccio ora nel controllore:
// 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 }
}
Soluzione
Non vorrei cercare la disponibilità nome utente nel modello di legante. Credo che sia compito del metodo di CreateUser
di farlo in questo caso.
Quindi, l'azione sarebbe come questo:
// 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)
}