2009-04-28 19 views
1

für ein Benutzerobjekt in meinem asp.net MVC-Projekt, ich habe einen benutzerdefinierten Modelbinder geschrieben zu überprüfen, ob Passwörter gültig sind und ob zwei passenden Passwörter wurden etc .. eingegebenBenutzerdefinierte IModelBinder und Datenbankzugriff

die Login-Namen Bedürfnisse aber um einzigartig zu sein, habe ich mich gefragt, ob ich das im Modelbinder überprüfen kann, oder ist das eine schlechte Übung?

Die Sache ist, dass die Sammelmappe aufgerufen wird, bevor Sie überhaupt zum Controller gelangen, also würde ich zwei Instanzen meines dataContext herumschweben lassen und somit mehrere Verbindungen zur Datenbank, ich könnte wohl eine Fabrik einrichten Das.

Dies ist ein Code-Schnipsel von dem, was ich jetzt in der Steuerung:

// 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 } 
} 

Antwort

1

Ich würde die Benutzername Verfügbarkeit im Modell Binder nicht überprüfen. Ich denke, dass es die CreateUser Methode ist, das in diesem Fall zu tun.

So wäre die Aktion wie folgt sein:

// 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) 
} 
+0

Dies ist ähnlich zu dem, was ich tat, so dass ich denke, das ist der richtige Weg zu gehen! – Morph

Verwandte Themen