【问题标题】:Custom IModelBinder and Database Access自定义 IModelBinder 和数据库访问
【发布时间】:2009-04-28 22:29:31
【问题描述】:

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

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

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

这是我现在在控制器中所做的代码 sn-p:

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

【问题讨论】:

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


    【解决方案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)
    }
    

    【讨论】:

    • 这与我正在做的类似,所以我想这是正确的方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多