数据注释自定义验证器在 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();
   }

任何建议表示赞赏。这是我第一次使用数据注释,所以我已经做好了为错过某些东西而感到愚蠢的准备!

数据注释自定义验证器在 MVC2 中不起作用(如我所料)

如果检查 ModelState 属性的内容(在调试器中),您应该能够看到在 ModelState.Keys 中验证的每个属性,并且对于每个值,您会看到ModelState.Values中的实际状态。如果我看一下你的控制器,你似乎发布了一个完整的乘客名单。您还应该检查您的值是否真的被发布(使用 Firebug 或 Fiddler)。也许您的字段在表单之外。

也许您还应该显示部分视图以发现错误。