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