自定义IModelBinder和数据库访问

时间:2009-04-28 14:05:55

标签: asp.net-mvc model-binding imodelbinder

对于我的asp.net mvc项目中的用户对象,我编写了一个自定义模型绑定器来检查密码是否有效以及是否输入了两个匹配的密码等。

登录名称必须是唯一的,我想知道我是否可以在模型绑定器中检查,或者这被认为是不好的做法?

事情是在你到达控制器之前调用了绑定器,所以我会有两个我的dataContext实例浮动,因此有多个数据库连接,我想我可以设置一个类型的工厂

这是我现在在控制器中执行的代码片段:

// 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 个答案:

答案 0 :(得分: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)
}