Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    Consultant freelance, n'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters

Utiliser le controle slider des Ajax Toolkit

Un des contrôles que j'apprécie particulièrement dans le projet Ajax Control Toolkit et le slider ce contrôle non présent en HTML est souvent utile dans des applications web.

Un slider ? ca ressemble à quoi cette bête là ? 

Un slider ressemble à ça :

Comment je fais pour avoir un slider dans mes pages web ?

C'est trés simple, presque trop même ! Le slider est un extender c'est à dire qu'il étend un contrôle déjà existant, dans notre cas il se greffe à une textbox. Si vous avez dans une application existante une textbox qui doit récuperer un nombre entre deux valeurs il est extremement simple de le convertir en slider.

Prenons un exemple concrêt avec une textbox qui prend l'âge d'une personne avec bien sur le RangeValidator et RequiredFieldValidator qui vont bien.

<asp:Label ID="LabelAge" runat="server" AssociatedControlID="TextBoxAge" Text="Votre age :" /> <asp:TextBox ID="TextBoxAge" runat="server" /> <asp:RangeValidator ID="RangeValidatorAge" ControlToValidate="TextBoxAge" runat="server" ErrorMessage="*" MinimumValue="0" MaximumValue="120" Type="Integer" /> <asp:RequiredFieldValidator ID="RequiredFieldValidatorAge" ControlToValidate="TextBoxAge" runat="server" ErrorMessage="*" />

Pour convertir ce textbox en Slider il suffit de rajouter ces quelques lignes :

<ajaxToolkit:SliderExtender ID="SliderExtenderAge" runat="server" BehaviorID="SliderAge" TargetControlID="TextBoxAge" Orientation="Horizontal" EnableHandleAnimation="true" />

Votre page ressemble alors à ça :

Non vous n'avez rien loupé ! il suffit de si peu de ligne pour arriver à un tel résultat ! Il manque quand même une chose primordial dans notre exemple : l'affichage de la valeur du slider, rien de bien compliqué il suffit de rajouter un label dans la page est de renseigner la propriété BoundControlID :

<ajaxToolkit:SliderExtender ID="SliderExtenderAge" runat="server" BehaviorID="SliderAge" TargetControlID="TextBoxAge" BoundControlID="TextBoxAge_BoundControl" Orientation="Horizontal" EnableHandleAnimation="true" />

Je vous l'avez dit que c'était simple ... Si vous vous abonnez à l'événement textchanged du textbox celui ci sera déclenché non pas à chaque fois que le textbox change de valeur mais lorsqu'on relâche la souris du curseur du slider, donc pas de soucis de ce côté là.

Vous pouvez également rajouter un "step" à votre slider si vous voulez séléctionner seulement de 10 en 10 par exemple, pour cela on utilise la propriété Steps. Vous voulez positionner le contrôle verticalement (de haut en bas) ? pas de soucis il suffit de modifier la propriété Orientation à Vertical.

Niveau sécurité, ca dit quoi ?

Mais revenons plus haut, vous avez vu que j'ai associé mon textBox à deux validators pour m'assurer que la valeur du textbox soit correcte, maintenant qu'on utilise un slider il n'est plus possible de rentrer des valeurs invalides, alors ces deux validators sont-ils toujours utiles ? Absolument ! Ce n'est pas parce qu'on effectue une validation côté client qu'il ne faut pas valider les valeurs côté serveur, un simple outil comme Fiddler permet de rejouer une requête HTTP libre à vous de la modifier et de mettre ce que l'on veut dans notre textbox.

J'aime JavaScript ! Je peux le faire sans utiliser ASP.net ?

Ce contrôle est sympathique mais peut-ont l'utiliser en JavaScript pur, sans même utiliser ASP.net ? bien sur que oui !

Il vous faut tout d'abord inclure quelques fichiers JavaScript : MicrosoftAjax.js, Common.js, Timer.js, Blocking.js, DragDropScripts.js, BaseScripts.js, animations.js, SliderBehavior.js. Puis il vous faut une textbox dans la page HTML :

<input type="text" id="slider" value="20" />

Vous êtes alors prêt pour convertir cette textbox en slider :

$create(AjaxControlToolkit.SliderBehavior, { 'EnableHandleAnimation' : true, 'id' : 'slider1', 'Orientation' : 1, 'Maximum' : 100, 'Minimum' : 0, 'RaiseChangeOnlyOnMouseUp' : false}, null, null, $get('slider'));

C'est tout ! Vous voyez que les différentes propriétés correspondent aux différentes propriété du contrôle ASP.net, une nouvelle propriété a quand même fait son apparition : RaiseChangeOnlyOnMouseUp que je définis à false (true par défaut), cette propriété déclenche l'événement textChanged à chaque fois que la textbox change pas seulement lorsqu'on relâche la souris.

Il nous est donc possible de nous abonner à l'evenement change du slider :

$addHandler($get('slider'), 'change', function(e){ // ici votre code sur le onchange du slider // pour obtenir la valeur : e.target.value; });

Ce contrôle est vraiment simple à utiliser non ? alors n'hésitez pas à l'utiliser si vous avez une textbox qui se transformerais bien en slider.  

Posted: jeudi 23 novembre 2006 02:28 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

khamlon a dit :

après test de la derniere partie de ton post (ie. le slider sans asp.net) dans un gadget, il lève quelques erreur (dans le fichier common.js et sliderbehavior.js notemmant), a part inclure les .js ci dessus il y a d'autres choses a faire ?

# novembre 23, 2006 14:02

cyril a dit :

Je pense que le problème que tu rencontres vient du fait que Atlas charge pleins de choses avant la fin du chargement de la page ce qui permet d'améliorer la vitesse de chargement.

Mais certains fichiers JavaScript nécessite que la page soit chargé c'est surement pour ca que tu as une erreur.

Voici comment je fais :

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

   <title>Untitled Page</title>

   <link href="../css/Slider.css" type="text/css" rel="stylesheet" />

   <script type="text/javascript" src="Microsoft.Web.Extensions/1.0.61025.0/Microsoft.Web.Resources.ScriptLibrary.MicrosoftAjax.debug.js"></script>

   <script type="text/javascript"><![CDATA[

       Sys.Application.queueScriptReference('/AjaxToolkit/Common.js');

       Sys.Application.queueScriptReference('/AjaxToolkit/Timer.js');

       Sys.Application.queueScriptReference('/AjaxToolkit/Blocking.js');

       Sys.Application.queueScriptReference('/AjaxToolkit/DragDropScripts.js');

       Sys.Application.queueScriptReference('/AjaxToolkit/BaseScripts.js');

       Sys.Application.queueScriptReference('/AjaxToolkit/animations.js');

       Sys.Application.queueScriptReference('/AjaxToolkit/SliderBehavior.js');

       Sys.Application.add_init(function(){

           $create(AjaxControlToolkit.SliderBehavior, {

               'EnableHandleAnimation' : true,

               'id' : 'slider1',

               'Orientation' : 1,

               'Maximum' : 100,

               'Minimum' : 0,

               'RaiseChangeOnlyOnMouseUp' : false}, null, null, $get('slider'));

       });

   ]]></script>

</head>

<body>

   <input type="text" id="slider" value="20" />

</body>

# novembre 23, 2006 14:53

khamlon a dit :

effectivement je n'ai plus les erreurs au chargement...hormis une erreur de syntax apparement dans le $create ... je vais essayé de creuser ca

# novembre 23, 2006 15:44

cyril a dit :

erf il manque un }); pour finir le json.

       Sys.Application.add_init(function(){

           $create(AjaxControlToolkit.SliderBehavior, {

               'EnableHandleAnimation' : true,

               'id' : 'slider1',

               'Orientation' : 1,

               'Maximum' : 100,

               'Minimum' : 0,

               'RaiseChangeOnlyOnMouseUp' : false}, null, null, $get('slider'));

           });

       });

# novembre 23, 2006 15:57

khamlon a dit :

non je ne crois pas il y a une { ouverte au début de la fonction, une dans le $create (fermé apres le raisechangeonlyonmouseup) donc a la fin il n'y as besoin que d'une accolade ca ne vient pas de la (je l'ai testé en rajoutant les accolades : même problèmes

# novembre 23, 2006 16:14
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le il y a 11 heures et 7 minutes

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52