如何[和在哪里]使用ModelBinder实现验证

时间:2009-08-20 14:52:50

标签: asp.net-mvc validation oop modelbinders

我正在使用ASP.NET MVC,MySQL和NHibernate开发一个小站点。

我有一个Contact类:

[ModelBinder(typeof(CondicaoBinder))]
public class Contact {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }    
}

模型活页夹:

public class ContactBinder:IModelBinder {
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
         Contact contact = new Contact ();
         HttpRequestBase form = controllerContext.HttpContext.Request;

         contact.Id = Int16.Parse(form["Id"]);
         contact.Name = form["Name"];
         contact.Age = Int16.Parse(form["Age"]);

         return contact;
    }
}

此外,我有一个表单来使用此操作更新我的数据库:

public ActionResult Edit([ModelBinder(typeof(ContactBinder))] Contact contact) {
    contactRepo.Update(contact);

    return RedirectToAction("Index", "Contacts");
}

直到这里,一切正常。但在更新我的联系人之前,我必须实施表单验证。

我的问题是:我应该在哪里实施此验证?在ActionResult方法或Model Binder中?或者其他地方?

非常感谢。

3 个答案:

答案 0 :(得分:2)

史蒂夫桑德森看看XVAL。

您的业务对象是应该应用业务逻辑的地方。

XVal

答案 1 :(得分:0)

我是史蒂夫桑德森的第二部,他的书很棒。

我真的很喜欢Rob Conery,Scott Hanselman,Phil Haack,Scott Guthrie写的书呆子晚餐方法。基本上,每个实体中都有一个方法可以验证商业逻辑。该方法返回包含字段/错误消息的RuleViolations列表。您还会为了方便而公开bool值。

您可以在此处获得免费章节:Nerd Dinner Chapter

答案 2 :(得分:0)

我认为这种情况最好遵循微软的建议Validation with Service Layer