essayer cette
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class EitherOr : ValidationAttribute
{
private const string _defaultErrorMessage = "'{0}' OR '{1}' OR '{2}' must have a value";
private readonly object _typeId = new object();
public EitherOr(string prop1, string prop2, string prop3)
: base(_defaultErrorMessage)
{
Prop1 = prop1;
Prop2 = prop2;
Prop3 = prop3;
}
public string Prop1 { get; private set; }
public string Prop2 { get; private set; }
public string Prop3 { get; private set; }
public override object TypeId
{
get
{
return _typeId;
}
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, Prop1, Prop2,Prop3);
}
public override bool IsValid(object value)
{
if(string.IsNullOrEmpty(Prop1)&&string.IsNullOrEmpty(Prop2) && string.IsNullOrEmpty(Prop3))
{
return false;
}
return true;
}
puis marquer votre classe avec l'attribut EitherOr:
[EitherOr("Bar","Stool","Hood", ErrorMessage = "please supply one of the properties")]
public class Foo
{
public string Bar{ get; set;}
public string Stool{ get; set;}
public string Hood{ get; set;}
}
S'il vous plaît noter que je servais des propriétés de chaîne, si votre propriété est d'un autre type, makle-vous de changer la validation IsValid(object value)
Merci Dusty, quel script de validation javacript devrais-je écrire dans ce cas? devrais-je encore implémenter DataAnnotationsModelValidator et l'enregistrer? – byte
Vous ne devriez pas avoir à écrire de javascript si vous utilisez le 'Html.ValidationSummary' par défaut. l'erreur messagfe sera affichée dans votre résumé de validation. cependant, si vous voulez l'afficher à côté de chacun des champs de formulaire, vous devrez utiliser: ModelState.AddModelError ("Bar", "nécessite une valeur"); –
Merci. Cette validation a-t-elle lieu au niveau du serveur? Je suis en train de regarder la validation des entrées du côté client afin de donner une meilleure interface utilisateur et d'éviter les déplacements du serveur lorsque cela est possible. La validation côté serveur sera toujours là. – byte