[英]Data Annotations Custom Validator not working (as I'd expect) in MVC2
在开始之前……我无法轻松地将项目迁移到MVC3。 所以。
我遇到的问题是,我已经定义了一个自定义验证器属性来检查字符串属性StringLengthInRangeAttribute的最大和最小长度。
当Controller在乘客列表上调用ModelState.IsValid时,如果未提供任何内容,则仅对Date属性的验证将变为无效。 我想这意味着我的问题不在于定制验证器,而是所有验证?
我有两个问题的症状:
1,当字符串为空时, 字符串上的Required验证器不会触发
和
2.我的自定义验证器永远不会被调用(我设置的断点永远不会被命中)。
public class Passenger
{
[Required(ErrorMessageResourceType = typeof(Resources.Messages.Passenger),
ErrorMessageResourceName = "RequireNumber")]
public int Number { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources.Messages.Passenger),
ErrorMessageResourceName = "RequireSurname")]
[StringLengthInRange(MinLength = 2, MaxLength = 30, ErrorMessageResourceType = typeof(Resources.Messages.Passenger),
ErrorMessageResourceName = "MaxLengthSurname")]
public string Surname { get; set; }
}
public class StringLengthInRangeAttribute:ValidationAttribute
{
public int MinLength { get; set; }
public int MaxLength { get; set; }
public override bool IsValid(object value)
{
if (((string)value).Length < MinLength)
{
return false;
}
if (((string)value).Length > MaxLength)
{
return false;
}
return true;
}
}
public ViewResult TailorHoliday(List<SearchAndBook.Models.ViewModels.Passenger> passengers,
int leadPassengerIndex)
{
if(!ModelState.IsValid)
{
return View("PassengerDetails", GetBookingState(_currentSession));
}
//...
return View();
}
任何建议表示赞赏。 这是我第一次使用数据注释,因此我很准备因缺少某些东西而感到愚蠢!
如果您检查的ModelState属性的内容(在调试程序),你应该能够看到每一个中得到确认财产ModelState.Keys
并为每个你看到的实际状态值ModelState.Values
。 如果我看您的管制员,您似乎发布了完整的乘客名单。 您还应该检查您的值是否真正发布(使用Firebug或Fiddler)。 也许您的字段不在表单中。
也许您也应该显示部分视图以发现错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.