Programmatischer Validator
Für einen eigenen Validator muss ein Attribut implementiert werden, welches in den “Custom Attributes” des Feldes hinterlegt wird. Dort werden die Parameter und die Validierungsmethode definiert.
public class MyValidatorAttribute : ValidationAttribute
{
public readonly string StartsWith;
public MyValidatorAttribute(string startsWith) : base()
{
StartsWith = startsWith;
}
protected override ValidationResult IsValid(Object value, ValidationContext validationContext)
{
if (value == null)
return ValidationResult.Success;
ErrorMessage = "";
if (value is string valueString && !valueString.StartsWith(StartsWith))
return ValidationAttributeHelper.CreateValidationResult("[INSERT TRANSLATION GUID]", ErrorMessage, validationContext, false);
return ValidationResult.Success;
}
}
Steuerelement für den Validator
Auf Basis des Attributs kann man den Validator in der Konfiguration setzen. Dazu wird eine entsprechende Klasse implementiert. Die Eigenschaften der Klasse werden automatisiert als Felder im Designer angezeigt. Mit ShowInToolbox
legt man fest ob der Konfigurator den Validator selbst auf beliebige Felder setzen kann.
[Serializable]
[Toolbox(EnumConfigurationType.OrmEntityConfigurationGuid, EnumConfigurationType.OrmSubEntityConfigurationGuid, ShowInToolbox = true)]
public class MyValidator : FieldValidatorBase
{
// Kann in der Konfiguration gesetzt werden
[DisplayName("Beginnt mit")]
[HelpText("Erklärung von 'Beginnt mit'")]
[PropertiesForm(5)]
[BARequired] // Muss gefüllt werden. Ist selbst ein Validator Attribut.
public string StartsWith { get; set; }
public MyValidator()
{
Id = new Guid("[INSERT VALIDATOR GUID]");
ToolboxName = "Beginnt mit";
ControlInitName = "StartsWithValidator";
ToolboxGroupName = Constants.Designer.ToolboxGroups.ORM.Validators;
Icon = "spellcheck";
DesignerHintText = "Erklärung des Validators";
}
// Definiert das dazugehörige Attribut
public override ValidationAttribute GetValidationAttribute()
{
return new MyValidatorAttribute(StartsWith);
}
// Validiert das Konfigurationsobjekt
public override List<ValidationModel> IsValid(ConfigurationBase configuration = null, EnumDesignerValidationState validationState = null)
{
List<ValidationModel> result = base.IsValid(configuration, validationState);
if (!StartsWith.Length > 3)
result.Add(new ValidationModel(nameof(StartsWith), this, "Feld muss mindestens vier Zeichen beinhalten."));
return result;
}
}
Attribut mit Steuerelement verknüpfen
Mit GetValidationAttribute()
verknüpft man das Steuerelment mit dem Attribut. Möchte man das Attribut schon in der programmíerten Datentablle setzen und in diesem Fall das Steuerelement anzeigen, muss das Interface IDesignableValidator
und die Methode CreateValidatorControl()
* beim Attribut implementiert werden.
public class MyValidatorAttribute : ValidationAttribute, IDesignableValidator
public FieldValidatorBase CreateValidatorControl()
{
return new MyValidator()
{
StartsWith = StartsWith,
};
}
Drag & Drop
Man sollte die Drag & Drop Regeln beachten. Mit den beiden Klassen TextValidatorBase
und GenericValidatorBase
als Basisklasse des Validators, kann dies vereinfacht werden.
public class MyValidator : TextValidatorBase { }
Alternativ müssen die Regeln manuell gesetzt werden.
[assembly: DnDRule(typeof(OrmTextField), typeof(MyValidator), EnumConfigurationType.OrmEntityConfigurationGuid)]