Próbuję utworzyć niestandardową weryfikację [IsUnique]. To sprawdzenie, czy wartość właściwości jest unikalna i zwraca właściwy komunikat.Niestandardowa własność walidacji niestandardowej - ogólne klasy
To jest mój kod, ale to tylko praca dla określonej klasy, jest możliwe, aby zrobić metodę, która otrzyma właściwą klasę przez metadane?
public class ArticleMetaData
{
[Required(AllowEmptyStrings = false)]
[IsUnique("Name")]
public String Name{ get; set; }
}
A mój zwyczaj sprawdzania poprawności:
class IsUnique : ValidationAttribute
{
public IsUnique(string propertyNames)
{
this.PropertyNames = propertyNames;
}
public string PropertyNames { get; private set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var myproperty = validationContext.ObjectType.GetProperty(PropertyNames);
var value = propiedad.GetValue(validationContext.ObjectInstance, null);
IEnumerable<String> properties;
List<string> propertiesList = new List<string>();
propertiesList.Add(myproperty.Name);
var dba = new myContext();
if (dba.Articles.Any(article => article.Name == (string)value))
{
return new ValidationResult("The name already exist", propertiesList);
}
return null;
}
}
pomysł byłoby po prostu użyć adnotacji [isUnique] oraz metoda podjąć klasy z adnotacją i szukać odpowiedniego podmiotu.
możliwe duplikat [Mogę zapisać rodzajowych atrybut w polu obiektu w] (http://stackoverflow.com/questions/304640/can-i-store-the-generics-attribute -into-obiektu-pola) –
Czy próbujesz uniemożliwić użytkownikowi zapisywanie duplikatów rekordów w bazie danych? –
@ JuanM.Elosegui to jest mój cel. nie duplikuj nazw, wiadomości e-mail itp. byłby to unikalny klucz SQL – grteibo