カスタムIModelBinderとデータベースへのアクセス
-
18-09-2019 - |
質問
私のasp.net MVCプロジェクト内のユーザーオブジェクトのために、私は
..パスワードが有効と2つの一致するパスワードがなどを入力したかどうかであるかどうかを確認するために、カスタムmodelbinderを書かれていますログイン名ががユニークである必要があり、私は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 }
}
解決
私は、モデルバインダーにユーザー名の可用性をチェックしません。私はそれが、この場合にはそれを行うために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)
}
所属していません StackOverflow