私はC#MVCを使用しています。リストがあります:
public List<int?> SomeList { get; set; }
ユーザーが数字の代わりに文字を入力しようとすると、リストのタイプが INT であるため、検証エラーが表示されます。
リストの項目の「範囲」(だけでなく) などの検証をさらに追加したい(それらはすべて同じ属性を持つ)。
それをしてもいいですか?どのように?
私はC#MVCを使用しています。リストがあります:
public List<int?> SomeList { get; set; }
ユーザーが数字の代わりに文字を入力しようとすると、リストのタイプが INT であるため、検証エラーが表示されます。
リストの項目の「範囲」(だけでなく) などの検証をさらに追加したい(それらはすべて同じ属性を持つ)。
それをしてもいいですか?どのように?
特にさまざまな基準で任意の検証を実装する場合は、いつでも自分で検証を実装できます。
bool validate(int value){
if ((value < min) || (value > max))
return false;
}
から継承する独自のクラスを作成する必要があります。List<T>
次に、新しいメソッドを宣言することにより、Addメソッドを「非表示」にすることができます。
class TestList : List<int>
{
public int MinValue { get; set; }
public int MaxValue { get; set; }
public TestList(int minValue, int maxValue)
{
this.MinValue = minValue;
this.MaxValue = maxValue;
}
public new void Add(int item)
{
if (item < MinValue || item > MaxValue)
throw new ArgumentException("Value is outside the acceptable range");
base.Add(item);
}
}
編集:コンストラクターを投入するのを忘れました。
rangeattributeのソースを調べて、範囲を持つ汎用リストを検証する独自の属性 ( http://msdn.microsoft.com/en-us/library/cc668224.aspx ) を作成することをお勧めします。
いこうぜ。