Je développe une application web dans laquelle je souhaite effectuer un ensemble de validations sur un certain champ (un nom de compte dans le cas spécifique).
Je dois vérifier que la valeur n'est pas vide, correspond à un certain modèle et n'est pas déjà utilisée.
J'ai essayé de créer un UserControl qui agrège un RequiredFieldValidator, un RegexValidator et un CustomValidator, je créé une propriété ControlToValidate
comme ceci:ASP.NET: agrégation de validateurs dans un contrôle utilisateur
public partial class AccountNameValidator : System.Web.UI.UserControl {
public string ControlToValidate {
get { return ViewState["ControlToValidate"] as string; }
set {
ViewState["ControlToValidate"] = value;
AccountNameRequiredFieldValidator.ControlToValidate = value;
AccountNameRegexValidator.ControlToValidate = value;
AccountNameUniqueValidator.ControlToValidate = value;
}
}
}
Cependant, si j'insère le contrôle sur une page et définissez ControlToValidate
à certains ID de contrôle, lorsque la page se charge, une erreur indique Impossible de trouver l'ID de contrôle 'AccountName' référencé par la propriété 'ControlToValidate' de 'AccountNameRequiredFieldValidator', ce qui me fait penser que les contrôles de mon UserControl ne peuvent pas résoudre correctement les contrôles dans la page parent.
Donc, j'ai deux questions:
1) Est-il possible d'avoir des contrôles de validateur à l'intérieur d'un UserControl valider un contrôle dans la page parent?
2) Est-il correct et pratique d'agréger plusieurs contrôles de validation dans un UserControl? Si non, quelle est la manière standard de procéder?
exposer les propriétés sur le validateur agrégé pour définir les noms des contrôles à valider est ce que je fais ... et même avec ClientID cela ne fonctionne toujours pas ... –
Dans ce cas, le problème est avec l'instanciation de contrôle- les contrôles à valider ne sont pas détectables par les validateurs lorsqu'ils sont imbriqués dans le contrôle utilisateur. Une autre raison de ne pas agréger ... –
Après réflexion, je pense qu'inclure le contrôle à valider dans le contrôle utilisateur est la meilleure solution; même s'il est possible de faire ce que je voulais, ça ne serait pas payant. –