2009-04-28 14 views
1

は、私が...パスワードが有効であるかどうか、および2つの一致するパスワードがなど入力されたかどうかを確認するためにカスタムIModelBinderと私のasp.net MVCプロジェクト内のユーザーオブジェクトのデータベースへのアクセス

ログイン名のニーズをカスタムmodelbinderを書かれています私はモデルバインダーでそれを確認できるのか、これは悪い習慣と考えられているのだろうかと思っていましたか?

コントローラに到達する前にバインダーが呼び出されているので、dataContextの2つのインスタンスが浮動し、データベースへの複数の接続があります。それ。

これは、私は、コントローラに、今何をすべきかのコードスニペットです:

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

答えて

1

私はモデルバインダーにユーザー名の可用性をチェックしません。この場合は、CreateUserメソッドの仕事がそれを行うと思います。

ので、アクションは次のようになります:

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

これは私が私が行くための正しい方法だと思うので、何をしていたかに似ています! – Morph

関連する問題