次のカスタムValidationAttributeを作成しました。
public class DateRangeAttribute : ValidationAttribute, IClientValidatable {
public DateTime MinimumDate = new DateTime(1901, 1, 1);
public DateTime MaximumDate = new DateTime(2099, 12, 31);
public DateRangeAttribute(string minDate, string maxDate, string errorMessage) {
MinimumDate = DateTime.Parse(minDate);
MaximumDate = DateTime.Parse(maxDate);
ErrorMessage = string.Format(errorMessage, MinimumDate.ToString("MM/dd/yyyy"), MaximumDate.ToString("MM/dd/yyyy"));
}
}
次のように、MVC4ビューモデルで使用したいと思います。
[DateRange(Resources.MinimumDate, Resources.MaximumDate, "Please enter a date between {0} and {1}")]
Resourcesは、SQLデータベースに格納されている一連のオプションに基づいて生成されたリソースクラスです。上記の2つのリソースプロパティに対して生成されたコードの簡略化されたバージョンは次のとおりです。
public class Resources {
public const string MinimumDate = "PropMinimumDate";
public static string PropMinimumDate
{
get { return "12/15/2010" }
}
public const string MaximumDate = "PropMaximumDate";
public static string PropMaximumDate
{
get { return "12/15/2012" }
}
}
それがどのように機能するかはわかりませんが、ValidationAttributesのリソースの一般的な使用法は、Resources.MinimumDateをPropMinimumDateに自動的にマップし、値「12/15/2010」を返すことを理解しています。
私が理解できないのは、2つの日付値をカスタムValidatorAttributeに渡すことができるように、そのプログラムを手動で飛躍させる方法です。現在コーディングされているように、「PropMinimumDate」と「PropMaximumDate」は、 DateRangeAttributeのコンストラクターに(それぞれ)渡されるminDateおよびmaxDateパラメーター値です。
やってみたら
[DateRange(Resources.PropMinimumDate, Resources.PropMaximumDate, "Please enter a date between {0} and {1}")]
コンパイルエラーが発生します:
属性の引数は、定数式、typeof式、または属性パラメータータイプの配列作成式である必要があります。
このタスクを達成する方法はありますか、それとも私は不可能を試みていますか?