数据注释自定义验证器在 MVC2 中不起作用(如我所料)
本文关键字:不起作用 自定义 注释 验证 MVC2 数据 | 更新日期: 2023-09-27 17:56:51
在我开始之前...我无法轻松地将项目迁移到 MVC3。所以。
我遇到的问题是我定义了一个自定义验证器属性来检查字符串属性 StringLengthInRangeAttribute 的最大和最小长度。
当控制器调用 ModelState.IsValid 时,在乘客列表中,只有 Date 属性的验证将引发无效,而未提供任何内容。我想这意味着我的问题不在于自定义验证器,而在于所有验证?
更新(为清楚起见,附加信息):
我有两个问题症状:
1.字符串上的必需验证程序在为空
时不会触发和
2.My 自定义验证器永远不会被调用(我设置的断点永远不会被命中)。
型:
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)。也许您的字段在表单之外。
也许您还应该显示部分视图以发现错误。