请注意,但我看起来很愚蠢。我创建了一个简单的模型绑定器,如下所示。
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时,它总是假的。我在这里缺少什么?
答案 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);
}
}