2010-09-09 2 views
0

Dans ma page .aspx, j'ai un ValidationSummary dans lequel je place des messages d'erreur renvoyés par mon Business Layer.Définir la propriété "texte" à un CustomValidator dans ASP.NET (Webforms)

Les messages d'erreur apparaît dans le résumé, ok, mais pas le "*" qui apparaît normalement à côté du champ = (

Dans le code derrière, j'ai le code suivant:

CustomValidator cv = new CustomValidator(); 
cv.ControlToValidate = field.ID; 
cv.ErrorMessage = "Error Message"; 
cv.Text = "*"; 
cv.IsValid = false; 
Page.Validators.Add(cv); 

Fondamentalement, je veux ajouter le « * » à côté de chaque champ incorrect, mais sans créer de CustomValidators pour chacun ... est-il possible?

Répondre

1

la propriété ErrorMessage sera affiché dans la ValidationSummary alors que la propriété Text sera affiché là où le Validator est. Pour répondre à vos besoins, vous devez mettre le CustomValidators à côté des contrôles que vous souhaitez valider.

Étant donné que tous les validateurs sont générés dans le code, vous devez ajouter ces valideurs à une position correcte en utilisant Page.Controls.AddAt(int indexer, Control child) car CustomValidator est également un contrôle.

Lorsque vous ajoutez le validateur à côté de la zone de texte, vous pouvez obtenir l'index exact en suivant le code.

<form id="form1" runat="server"> 
    <asp:TextBox ID="tb" runat="server"></asp:TextBox> 
    <asp:Button runat="server" Text="just a post back" /> 
</form> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    CustomValidator v = new CustomValidator(); 
    v.ErrorMessage = "error!"; 
    v.Text = "****"; 
    v.ControlToValidate = "tb"; 
    int index = form1.Controls.IndexOf(tb); 
    form1.Controls.AddAt(index + 1, v); 
} 

REMARQUE: si vous mettez la zone de texte dans un PlaceHolder ou des conteneurs, vous ne pouvez pas l'obtenir par form1.Controls parce Container.Controls Renvoie l'enfant 1er niveau contrôle uniquement.

+0

Merci! Le "index" m'a aidé =) – Kira

Questions connexes