0
モデルの検証を実行する2つのカスタム検証があります。最初は、文字列 "<"と ">"に文字が含まれているかどうかを確認するコントロールです。2番目の日付は2つの日付が連続しているかどうかを確認するためのものです。ASP.NET MVCのカスタム検証は機能しません
アングルブラケットバリ
public class AngleBracketsValidator : ValidationAttribute
{
public override Boolean IsValid(Object value)
{
Boolean isValid = true;
if (value != null && (value.ToString().Contains('<') || value.ToString().Contains('>')))
{
isValid = false;
}
return isValid;
}
}
日バリ
public class CustomDateCompareValidator : ValidationAttribute
{
public String PropertyDateStartToCompare { get; set; }
public String PropertyDateEndToCompare { get; set; }
public CustomDateCompareValidator(string propertyDateStartToCompare, string propertyDateEndToCompare)
{
PropertyDateStartToCompare = propertyDateStartToCompare;
PropertyDateEndToCompare = propertyDateEndToCompare;
}
public override Boolean IsValid(Object value)
{
Type objectType = value.GetType();
PropertyInfo[] neededProperties =
objectType.GetProperties()
.Where(propertyInfo => propertyInfo.Name == PropertyDateStartToCompare || propertyInfo.Name == PropertyDateEndToCompare)
.ToArray();
if (neededProperties.Count() != 2)
{
throw new ApplicationException("CustomDateCompareValidator error on " + objectType.Name);
}
Boolean isValid = true;
if (Convert.ToDateTime(neededProperties[0].GetValue(value, null)) != Convert.ToDateTime("01/01/0001") && Convert.ToDateTime(neededProperties[1].GetValue(value, null)) != Convert.ToDateTime("01/01/0001"))
{
if (Convert.ToDateTime(neededProperties[0].GetValue(value, null)) > Convert.ToDateTime(neededProperties[1].GetValue(value, null)))
{
isValid = false;
}
}
return isValid;
}
}
モデル:最初のバリことが知られている試験を行う
[Serializable]
[CustomDateCompareValidator("DtStart", "DtEnd", ErrorMessage = "the start date is greater than that of the end.")]
public class ProjModel
{
[Display(Name = "Codice:")]
[AllowHtml]
[AngleBracketsValidator(ErrorMessage = "Code can not contain angle bracket.")]
public string Code { get; set; }
[Display(Name = "Date Start:")]
public DateTime? DtStart { get; set; }
[Display(Name = "Date End:")]
public DateTime? DtEnd { get; set; }
}
ながら、角括弧のは、表示されています2番目に、日付のものが表示されます。しかし、キュー内に公平な値を投稿し、山括弧の検証をパスすると、日付バリデータの表示でエラーメッセージが表示されます。 正しく動作させるためのアイデアはありますか?
質問を再入力してください。実際にうまくいかないことを理解するのは難しいです。 – Mats
私の悪い英語のため申し訳ありません...問題は、同時に2つのバリデータを表示できないことです。 –
'CustomDateCompareValidator'をクラスに適用しないでください。これをモデルのプロパティに適用します。たとえば、 'DtEnd'とし、それに他のプロパティ(' DtStart')を指定して比較します。 [foolproof](http://foolproof.codeplex.com/) '[GreaterThan]'や同様の検証属性を使用することをお勧めします。これはクライアント側の検証も行います。 –