OVH Cloud OVH Cloud

ValidationProperty

3 réponses
Avatar
Sébastien Decoux
Bonjour,

J'ai un problème avec un contrôle perso qui ne déclenche pas le
RequiredFieldValidator...

J'ai créé un contrôle utilisateur (Web Of Course) qui contient un
textbox (entre autre)
J'ai créé une propriété qui encapsule la propriété Text du TextBox pour
la rendre visible à l'extérieur. Pour faire original, je l'ai appellé
"Text" :).

Voici le code de la propriété Text :

[Bindable(true)]
[Description("Obtient ou défini la valeur entrée dans le contrôle")]
[Category("Appearance")]
[DefaultValue("")]
public string Text
{
get
{
EnsureChildControls();
return this.txtDate.Text;
}
set
{
EnsureChildControls();
this.txtDate.Text = value;
}
}

J'ai ensuite voulu faire en sorte que mon contrôle soit validable, c'est
à dire qu'il puisse déclencher les contrôles des validation
(RequireFieldValidator, RegularExpressionValidator,...)

J'ai donc modifié la déclaration de ma classe :

[DefaultProperty("Text")]
[ValidationProperty("Text")]
[Designer(typeof(Designers.DatePickerDesigner))]
[ToolboxData("<{0}:DatePicker runat=server></{0}:DatePicker>")]
[ToolboxBitmap(typeof(System.Web.UI.WebControls.TextBox))]
public class DatePicker : System.Web.UI.WebControls.WebControl

Le problème que je rencontre, c'est que tous les contrôles de
validations fonctionnent (Compare, RegularExpression, Range, Custom),
sauf le RequiredFieldValidator...

Quelqu'un à une idée d'où cela pourrait provenir ?


--


Sébastien Decoux
PS : pour obtenir mon adresse mail réelle, remplacez courrier par sikia

3 réponses

Avatar
Sébastien Decoux
Je peux appporter de nouvelles infos. Mon contrôle est bien validé, mais
seulement coté serveur (il n'y a que le RequireFieldValidator qui ne se
déclenche pas côté client)... Or, comme mon contrôle est situé sur une
page contenant d'autres Validators, ceux-ci déclenchés coté client,
c'est un peu génant d'avoir le message d'erreur seulement après le PostBack.

Est-ce que cette nouvelle info donne des idées à quelqu'un ?


Sébastien Decoux a écrit :
Bonjour,

J'ai un problème avec un contrôle perso qui ne déclenche pas le
RequiredFieldValidator...

J'ai créé un contrôle utilisateur (Web Of Course) qui contient un
textbox (entre autre)
J'ai créé une propriété qui encapsule la propriété Text du TextBox pour
la rendre visible à l'extérieur. Pour faire original, je l'ai appellé
"Text" :).

Voici le code de la propriété Text :

[Bindable(true)]
[Description("Obtient ou défini la valeur entrée dans le contrôle")]
[Category("Appearance")]
[DefaultValue("")]
public string Text
{
get
{
EnsureChildControls();
return this.txtDate.Text;
}
set
{
EnsureChildControls();
this.txtDate.Text = value;
}
}

J'ai ensuite voulu faire en sorte que mon contrôle soit validable, c'est
à dire qu'il puisse déclencher les contrôles des validation
(RequireFieldValidator, RegularExpressionValidator,...)

J'ai donc modifié la déclaration de ma classe :

[DefaultProperty("Text")]
[ValidationProperty("Text")]
[Designer(typeof(Designers.DatePickerDesigner))]
[ToolboxData("<{0}:DatePicker runat=server></{0}:DatePicker>")]
[ToolboxBitmap(typeof(System.Web.UI.WebControls.TextBox))]
public class DatePicker : System.Web.UI.WebControls.WebControl

Le problème que je rencontre, c'est que tous les contrôles de
validations fonctionnent (Compare, RegularExpression, Range, Custom),
sauf le RequiredFieldValidator...

Quelqu'un à une idée d'où cela pourrait provenir ?





--


Sébastien Decoux
PS : pour obtenir mon adresse mail réelle, remplacez courrier par sikia
Avatar
Julien Adam
Peut-être qu'aucun javascript de validation n'est prévu pour fonctionner
avec ton controle. Et la validation n'est donc possible que côté serveur
puisque ASP.NET ne sait pas le valider coté client.

Julien Adam

"Sébastien Decoux" wrote in message
news:
Je peux appporter de nouvelles infos. Mon contrôle est bien validé, mais
seulement coté serveur (il n'y a que le RequireFieldValidator qui ne se
déclenche pas côté client)... Or, comme mon contrôle est situé sur une
page contenant d'autres Validators, ceux-ci déclenchés coté client,
c'est un peu génant d'avoir le message d'erreur seulement après le


PostBack.

Est-ce que cette nouvelle info donne des idées à quelqu'un ?


Sébastien Decoux a écrit :
> Bonjour,
>
> J'ai un problème avec un contrôle perso qui ne déclenche pas le
> RequiredFieldValidator...
>
> J'ai créé un contrôle utilisateur (Web Of Course) qui contient un
> textbox (entre autre)
> J'ai créé une propriété qui encapsule la propriété Text du TextBox pour
> la rendre visible à l'extérieur. Pour faire original, je l'ai appellé
> "Text" :).
>
> Voici le code de la propriété Text :
>
> [Bindable(true)]
> [Description("Obtient ou défini la valeur entrée dans le contrôle")]
> [Category("Appearance")]
> [DefaultValue("")]
> public string Text
> {
> get
> {
> EnsureChildControls();
> return this.txtDate.Text;
> }
> set
> {
> EnsureChildControls();
> this.txtDate.Text = value;
> }
> }
>
> J'ai ensuite voulu faire en sorte que mon contrôle soit validable, c'est
> à dire qu'il puisse déclencher les contrôles des validation
> (RequireFieldValidator, RegularExpressionValidator,...)
>
> J'ai donc modifié la déclaration de ma classe :
>
> [DefaultProperty("Text")]
> [ValidationProperty("Text")]
> [Designer(typeof(Designers.DatePickerDesigner))]
> [ToolboxData("<{0}:DatePicker runat=server></{0}:DatePicker>")]
> [ToolboxBitmap(typeof(System.Web.UI.WebControls.TextBox))]
> public class DatePicker : System.Web.UI.WebControls.WebControl
>
> Le problème que je rencontre, c'est que tous les contrôles de
> validations fonctionnent (Compare, RegularExpression, Range, Custom),
> sauf le RequiredFieldValidator...
>
> Quelqu'un à une idée d'où cela pourrait provenir ?
>
>

--


Sébastien Decoux
PS : pour obtenir mon adresse mail réelle, remplacez courrier par sikia


Avatar
Sébastien Decoux
Alors, j'ai isolé complétement le problème.... Maintenant, j'ai un
controle (composite) qui contient un TextBox et une DropDownList... Tout
se passe surper bien tant que la liste est vide. Dès que je la rempli,
la validation ne se fait plus que du côté serveur... Comment cela se
fait-t-il ???
Pourquoi la validation côté client dépend-elle du contenu de la liste ?

Voici mon code, pour ceux qui veulent tester (il suffit de commenter et
décommenter l'appel de FillCalendarChoices() pour rerproduire les deux
situations) :

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;

namespace WebControlLibrary1
{
/// <summary>
/// Description résumée de WebCustomControl1.
/// </summary>
[DefaultProperty("Text")]
[ValidationProperty("Text")]
[ToolboxData("<{0}:WebCustomControl1
runat=server></{0}:WebCustomControl1>")]
public class WebCustomControl1 : System.Web.UI.WebControls.WebControl,
INamingContainer
{
private TextBox txtDate;
private DropDownList ddlYear;

/// <summary>
/// Obtient ou défini la valeur entrée dans le contrôle
/// </summary>
[Bindable(true)]
[Description("Obtient ou défini la valeur entrée dans le contrôle")]
[Category("Appearance")]
[DefaultValue("")]
public string Text
{
get
{
EnsureChildControls();
return this.txtDate.Text;
}

set
{
EnsureChildControls();
this.txtDate.Text = value;
}
}

public override ControlCollection Controls
{
get
{
EnsureChildControls();
return base.Controls;
}
}

protected override void CreateChildControls()
{
this.txtDate = new TextBox();
this.txtDate.Width = 112;

this.ddlYear = new DropDownList();

FillCalendarChoices();

Controls.Add(this.txtDate);
Controls.Add(this.ddlYear);
}

private void FillCalendarChoices()
{
for (int x=0; x<; x++)
{
this.ddlYear.Items.Add(x.ToString());
}
}
}
}