1

私のasp.net mvcプロジェクトのユーザーオブジェクトについて、パスワードが有効かどうか、2つの一致するパスワードが入力されたかどうかなどを確認するカスタムモデルバインダーを作成しました.

ログイン名は一意である必要がありますが、モデルバインダーでそれを確認できるかどうか疑問に思っていましたか、それともこれは悪い習慣と見なされていますか?

問題は、コントローラーに到達する前にバインダーが呼び出されることです。そのため、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 }
}
4

1 に答える 1

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)
}
于 2009-04-28T14:29:31.780 に答える