我使用的是asp.net mvc,我想創建一個自定義驗證屬性來驗證文本輸入引用的StartTime
和EndTime
。將參數傳遞給asp.net中的自定義驗證屬性mvc
我曾嘗試:
型號:
public class MyModel
{
public bool GoldTime { get; set; }
[TimeValidation(@"^\d{1,2}:\d{1,2}$", GoldTime, ErrorMessage = "Start time is invalid.")]
public string StartTime { get; set; }
[TimeValidation(@"^\d{1,2}:\d{1,2}$", GoldTime, ErrorMessage = "End time is invalid.")]
public string EndTime { get; set; }
}
驗證屬性:
public class TimeValidationAttribute : ValidationAttribute
{
private readonly string _pattern;
private readonly bool _useGoldTime;
public TimeValidationAttribute(string pattern, bool useGoldTime)
{
_pattern = pattern;
_useGoldTime = useGoldTime;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (_useGoldTime)
{
var regex = new Regex(_pattern);
if (!regex.IsMatch(value.ToString()))
{
return new ValidationResult(ErrorMessage);
}
}
return ValidationResult.Success;
}
}
但我收到此錯誤信息:
對象引用非靜態字段所需的方法,或 財產「MyModel.GoldTime」
然後,我又通過改變GoldTime
(模型)來true
嘗試,錯誤信息將消失。
所以,我的問題是:我如何可以傳遞參數GoldTime
的屬性構造?我需要使用GoldTime
作爲重點,使驗證的StartTime
和EndTime
值。
謝謝!
您的參數需要是其他屬性的名稱,而不是其他屬性的實際值(並且在您的方法使用反射來獲取其他屬性的值)。我推薦閱讀[ASP.NET MVC 3驗證完整指南 - 第2部分](https://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net- MVC -3-部分-2)瞭解如何創建自定義驗證屬性 –
作爲邊注,使用'string'對於這似乎是用於設置日期或時間是不恰當的特性。而你的正則表達式允許'90:80'我認爲也是無效的 –
@StephenMuecke感謝您的鏈接和說明。我正在閱讀文檔。 – Vayne