Ajout de messages d'erreur runtime à la page de validation
l'Une des exigences lors de la rédaction de ce site est la capacité de l'objet du modèle de contraintes en OCL et puis la validation de la page en cours à l'encontre de ces contraintes.
Le problème avec la normale validateurs, c'est qu'ils sont conçus pour valider les contrôles individuels plutôt que d'une liste de contraintes sur un objet. L'approche que j'ai adoptée a été de créer un validateur qui je peux placer sur n'importe quel formulaire web et ajouter autant d'erreurs que j'ai besoin.
La première étape a été de créer un WebControl qui a soutenu IValidator
public class MultiValidator : WebControl, IValidator
{
}
ensuite, j'ai ajouté une liste de tableaux de tenir les chaînes d'erreur, et une méthode pour ajouter un message d'erreur.
private ArrayList Erreurs = new ArrayList()
public void AddError(string message)
{
les Erreurs.Ajouter(message)
}//AddError
Lors de l'ASP .net valide une page, il énumère tous les IValidators au sein de son propre Validateurs de la propriété, et a appelé IValidator.Validate(). Pour déterminer si la page est valide ou non il vérifie ensuite IValidator.IsValid.
Pour ajouter des messages d'erreur lors de l'exécution j'ai décidé de créer un statique de la classe de validation qui revient toujours 'faux' de l'IsValidator.IsValid. Pour chaque message d'erreur dans mon MultiValidator je pourrais ensuite il suffit de créer une instance de l'une de ces validateurs.
[ToolboxItem(false)]
classe interne StaticValidator : IValidator
{
private string errorMessage
#région IValidator
void IValidator.Valider()
{
}//Valider
bool IValidator.IsValid
{
get { return false }
set { }
}//IsValid
#endregion
public string ErrorMessage
{
get { return errorMessage }
set { errorMessage = valeur }
}//ErrorMessage
}
Maintenant que la StaticValidator a été écrit, tout ce que j'avais à faire était d'ajouter la IValidator implémentations de mon MultiValidator classe.
#région IValidator
void IValidator.Valider()
{
isValid = (Erreurs.Count == 0)
foreach(string erreur dans les Erreurs)
{
StaticValidator validator = new StaticValidator()
validateur.ErrorMessage = erreur
de la Page.Les validateurs.Ajouter(validator)
les Validateurs.Ajouter(validator)
}//foreach erreurs
}//Valider
bool IValidator.IsValid
{
get { return isValid }
set { isValid = valeur }
}//IsValid
#endregion
Dans un formulaire, je voudrais maintenant
- Définir 'CausesValidation' pour de faux sur mon bouton submit.
- Valider mon objet
- Appel MultiValidator1.AddError() pour chaque erreur rencontrée
- Appel de la Page.Valider()
- Vérifiez la Page.IsValid comme normal
à l'Aide d'un ValidationSummary j'ai pu afficher le cassé contraintes à l'utilisateur de rectification. L'ensemble du code source est indiquée ci-dessous....
MultiValidator.cs
en utilisant le Système
à l'aide du Système.Collections
à l'aide du Système.ComponentModel
à l'aide du Système.Web.UI
à l'aide du Système.Web.L'INTERFACE utilisateur.Contrôles webcontrols
l'espace de noms DroopyEyes.Web.Contrôle
{
public class MultiValidator : WebControl, IValidator
{
#Membres de la région de
private bool isValid = true
private string errorMessage = ''
private ArrayList Erreurs = new ArrayList()
private ArrayList Validateurs = new ArrayList()
#endregion
#région IValidator
void IValidator.Valider()
{
isValid = (Erreurs.Count == 0)
foreach(string erreur dans les Erreurs)
{
StaticValidator validator = new StaticValidator()
validateur.ErrorMessage = erreur
de la Page.Les validateurs.Ajouter(validator)
les Validateurs.Ajouter(validator)
}//foreach erreurs
}//Valider
bool IValidator.IsValid
{
get { return isValid }
set { isValid = valeur }
}//IsValid
#endregion
protected override void OnInit(EventArgs e)
{
base.OnInit(e)
de la Page.Les validateurs.Ajouter(cet)
}
protected override void OnUnload(EventArgs e)
{
si la Page != null)
{
de la Page.Les validateurs.Supprimer(ce)
foreach(IValidator validateur dans les Validateurs)
de la Page.Les validateurs.Supprimer(validator)
}//la Page != null
de base.OnUnload(e)
}
public void AddError(string message)
{
les Erreurs.Ajouter(message)
}//AddError
#Propriétés de la région de
[Bindable(true)]
[Catégorie('Apparence')]
[Valeur par défaut('')]
public string ErrorMessage
{
get { return errorMessage }
set { errorMessage = valeur }
}//ErrorMessage
#endregion
}
}
StaticValidator.cs
en utilisant le Système
à l'aide du Système.ComponentModel
à l'aide du Système.Web.UI
l'espace de noms DroopyEyes.Web.Contrôle
{
[ToolboxItem(false)]
classe interne StaticValidator : IValidator
{
private string errorMessage
#région IValidator
void IValidator.Valider()
{
Système.Diagnostics.Trace.WriteLine('StaticValidator.Valider()')
}//Valider
bool IValidator.IsValid
{
get { return false }
set { }
}//IsValid
#endregion
public string ErrorMessage
{
get { return errorMessage }
set { errorMessage = valeur }
}//ErrorMessage
}
}
Ajout de messages d'erreur runtime a la page de validation
Ajout de messages d'erreur runtime a la page de validation : Plusieurs milliers de conseils pour vous faciliter la vie.
l'Une des exigences lors de la redaction de ce site est la capacite de l'objet du modele de contraintes en OCL et puis la validation de la page en cours a l'encontre de ces contraintes.
Le probleme avec la normale validateurs, c'est qu'ils sont conçus pour valider les controles individuels plutot que d'une liste de contraintes sur un objet. L'approche que j'ai adoptee a ete de creer un validateur qui je peux placer sur n'importe quel formulaire web et ajouter autant d'erreurs que j'ai besoin.
La premiere etape a ete de creer un WebControl qui a soutenu IValidator
public class MultiValidator : WebControl, IValidator
{
}
ensuite, j'ai ajoute une liste de tableaux de tenir les chaînes d'erreur, et une methode pour ajouter un message d'erreur.
private ArrayList Erreurs = new ArrayList()
public void AddError(string message)
{
les Erreurs.Ajouter(message)
}//AddError
Lors de l'ASP .net valide une page, il enumere tous les IValidators au sein de son propre Validateurs de la propriete, et a appele IValidator.Validate(). Pour determiner si la page est valide ou non il verifie ensuite IValidator.IsValid.
Pour ajouter des messages d'erreur lors de l'execution j'ai decide de creer un statique de la classe de validation qui revient toujours 'faux' de l'IsValidator.IsValid. Pour chaque message d'erreur dans mon MultiValidator je pourrais ensuite il suffit de creer une instance de l'une de ces validateurs.
[ToolboxItem(false)]
classe interne StaticValidator : IValidator
{
private string errorMessage
#region IValidator
void IValidator.Valider()
{
}//Valider
bool IValidator.IsValid
{
get { return false }
set { }
}//IsValid
#endregion
public string ErrorMessage
{
get { return errorMessage }
set { errorMessage = valeur }
}//ErrorMessage
}
Maintenant que la StaticValidator a ete ecrit, tout ce que j'avais a faire etait d'ajouter la IValidator implementations de mon MultiValidator classe.
#region IValidator
void IValidator.Valider()
{
isValid = (Erreurs.Count == 0)
foreach(string erreur dans les Erreurs)
{
StaticValidator validator = new StaticValidator()
validateur.ErrorMessage = erreur
de la Page.Les validateurs.Ajouter(validator)
les Validateurs.Ajouter(validator)
}//foreach erreurs
}//Valider
bool IValidator.IsValid
{
get { return isValid }
set { isValid = valeur }
}//IsValid
#endregion
Dans un formulaire, je voudrais maintenant
- Definir 'CausesValidation' pour de faux sur mon bouton submit.
- Valider mon objet
- Appel MultiValidator1.AddError() pour chaque erreur rencontree
- Appel de la Page.Valider()
- Verifiez la Page.IsValid comme normal
a l'Aide d'un ValidationSummary j'ai pu afficher le casse contraintes a l'utilisateur de rectification. L'ensemble du code source est indiquee ci-dessous....
MultiValidator.cs
en utilisant le Systeme
a l'aide du Systeme.Collections
a l'aide du Systeme.ComponentModel
a l'aide du Systeme.Web.UI
a l'aide du Systeme.Web.L'INTERFACE utilisateur.Controles webcontrols
l'espace de noms DroopyEyes.Web.Controle
{
public class MultiValidator : WebControl, IValidator
{
#Membres de la region de
private bool isValid = true
private string errorMessage = ''
private ArrayList Erreurs = new ArrayList()
private ArrayList Validateurs = new ArrayList()
#endregion
#region IValidator
void IValidator.Valider()
{
isValid = (Erreurs.Count == 0)
foreach(string erreur dans les Erreurs)
{
StaticValidator validator = new StaticValidator()
validateur.ErrorMessage = erreur
de la Page.Les validateurs.Ajouter(validator)
les Validateurs.Ajouter(validator)
}//foreach erreurs
}//Valider
bool IValidator.IsValid
{
get { return isValid }
set { isValid = valeur }
}//IsValid
#endregion
protected override void OnInit(EventArgs e)
{
base.OnInit(e)
de la Page.Les validateurs.Ajouter(cet)
}
protected override void OnUnload(EventArgs e)
{
si la Page != null)
{
de la Page.Les validateurs.Supprimer(ce)
foreach(IValidator validateur dans les Validateurs)
de la Page.Les validateurs.Supprimer(validator)
}//la Page != null
de base.OnUnload(e)
}
public void AddError(string message)
{
les Erreurs.Ajouter(message)
}//AddError
#Proprietes de la region de
[Bindable(true)]
[Categorie('Apparence')]
[Valeur par defaut('')]
public string ErrorMessage
{
get { return errorMessage }
set { errorMessage = valeur }
}//ErrorMessage
#endregion
}
}
StaticValidator.cs
en utilisant le Systeme
a l'aide du Systeme.ComponentModel
a l'aide du Systeme.Web.UI
l'espace de noms DroopyEyes.Web.Controle
{
[ToolboxItem(false)]
classe interne StaticValidator : IValidator
{
private string errorMessage
#region IValidator
void IValidator.Valider()
{
Systeme.Diagnostics.Trace.WriteLine('StaticValidator.Valider()')
}//Valider
bool IValidator.IsValid
{
get { return false }
set { }
}//IsValid
#endregion
public string ErrorMessage
{
get { return errorMessage }
set { errorMessage = valeur }
}//ErrorMessage
}
}
Ajout de messages d'erreur runtime à la page de validation
By commentfaire
Ajout de messages d'erreur runtime à la page de validation : Plusieurs milliers de conseils pour vous faciliter la vie.