簡體   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