繁体   English   中英

数据注释自定义验证器在MVC2中不起作用(正如我期望的那样)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM