当我使用模型绑定器时,MVC数据注释验证不会触发

时间:2014-09-02 14:07:58

标签: asp.net-mvc

请注意,但我看起来很愚蠢。我创建了一个简单的模型绑定器,如下所示。

 public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            HttpRequestBase request = controllerContext.HttpContext.Request;
            Customer obj = (Customer)base
                    .BindModel(controllerContext, bindingContext);
            obj.CustomerName = request.Form["Text1"];
            return obj;

}

我在Customer模型上有一个必需的字段验证器

 public class Customer
    {
        private string _CustomerName;

        [Required]
        public string CustomerName
        {
            get { return _CustomerName; }
            set { _CustomerName = value; }
        }

    }
在Global.asax中的

我已经将模型与活页夹捆绑在一起

 ModelBinders.Binders.Add(typeof(Customer), new MyBinder());

但是当我检查ModelState.IsValid时,它总是假的。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

通过直接访问该属性,您将绕过默认模型绑定器调用的数据注释绑定(这是BindModel方法的一部分)。

您需要让基类通过让请求项与您的CustomerName属性具有相同的名称来处理此行为,或者自己调用它:http://odetocode.com/blogs/scott/archive/2011/06/29/manual-validation-with-data-annotations.aspx

以下是上述链接网站的代码段(适用于您的代码):

var cust = new Customer();
var context = new ValidationContext(cust, serviceProvider: null, items: request);
var results = new List<ValidationResult>();

var isValid = Validator.TryValidateObject(cust, context, results);

if (!isValid)
{
    foreach (var validationResult in results)
    {
        Console.WriteLine(validationResult.ErrorMessage);
    }
}