IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

WebControl et méthodes personnalisées sur l' instance javascript


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut WebControl et méthodes personnalisées sur l' instance javascript
    Bonjour,

    Je rencontre le problème suivant :

    Je souhaiterais créer un WebControl, et que ce webControl me propose des méthodes Javascript perso quand je le récupère en Javascript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function button_click()
    {
         var instanceMyWebControl = $get("monWebControl");
         instanceMyWebControl.maMethodePerso(); 
    }
    ...
    <cc1:myWebControl runat="server" ID="monWebControl" />
    Pour être précis: lorsque je récupère mon controle dans une fonction Javascript (apres un clic sur un bouton présent sur ma page mais n'ayant aucun rapport avec mon webcontrol par exemple), je voudrais pouvoir appeler des méthodes Javascript interne à mon composant (ici maMethodePerso)

    Auriez-vous une idée sur la marche à suivre pour arriver à ce résultat?

    Mamat.

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Il faut qu moins que tu fasses ton En utilisant l'id généré par le runtime. Est-ce le cas? On ne dirait pas car en général les id générés sont plus complexes est sont préfixés par le type du controle.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Salut,

    Merci pour ta réponse.
    Je récupère correctement mon élément avec le $get(). Ca me retourne un objet de type DispHTMLSpanElement.

    Je m'attendais a avoir un élément du type de mon WebControl ou quelque chose d'approchant qui pourrait me permettre d'etendre les propriétés et méthodes.

    Y'aurait il des tags c# ou quelque chose qui me permettrait de faire ca? ou une autre méthode via javascript qui me permettrait d'identifier mon composant client-side dans le bon type et de l'utiliser ???

    Je pense que c'est possible étant donné que des bibliothèques de composant sur le net le font (ex : Infragistics, mais pas accès au source).

    Mamat.

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Je n'ai peut-être pas compris mais tu ne peux pas faire de C# côté client.
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Salut!

    J'ai réussi a faire ce que je voulais c'est a dire pouvoir travailler sur mon webcontrol avec mes propres méthodes et propriétés javascript, et ce sans aucun ajout de code dans la page cliente que de déposer mon webcontrol.

    mon webcontrol enregistre 2 webressource js :
    - Fwk.js dans lequel on enregistre les composant avec un type et qui va permettre de récupérer les différentes instance de mes composant (ici un seul),
    - listePersonne.js qui est une classe javascript qui représente mon objet (ici mon web control qui génère une liste de checkbox)

    Fwk.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var instances = new Array();
     
    function __GetElementById(id) {
        return instances[id];
    }
     
     
    function onLoad(id, type) {
        switch (type) {
            case "ListePersonne":
                instances[id] = new ListePersonne(id);
                break;
           .... // différents types si on a d'autre controle à gérer...
            default:
                break;
        }
    }
    ListePersonne.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function ListePersonne(id) {
        this.id = id;
        this.instance = $get(id);
    }
     
    ListePersonne.prototype = {
        getInstance : function() {
            return this.instance;
        }
    }
     
    ListePersonne.prototype.IsSomebodySelected = isSomebodySelected;
     
    function isSomebodySelected() {
        var instance = this.getInstance();
        var checkBoxs = instance.children[0].children;
        var i = 0;
        var retour = false;
     
        for (i = 0; i < checkBoxs.length; i++) {
            if (checkBoxs[i].children[0].checked) {
                retour = true;
            }
        }
        return retour;
    }
    Mon webcontrol :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    [assembly: WebResource(ListeSelectionPersonne.scriptRessource, "text/javascript")]
    [assembly: WebResource(ListeSelectionPersonne.scriptFwkJs, "text/javascript")] 
     
     [ToolboxData("<{0}:ListeSelectionPersonne runat=server></{0}:ListeSelectionPersonne>")]
        public class ListeSelectionPersonne : WebControl
        {
           ....
           public const string scriptRessource = "MonAssembly.Resources.Javascripts.ListeSelectionPersonne.js";
     
           public const string scriptFwkJs = "MonAssembly.Resources.Javascripts.Fwk.js";
     
           ....
     
        protected override void OnLoad(EventArgs e)
            {
                if (!this.Page.ClientScript.IsStartupScriptRegistered("onload"))
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "onload", "<script type=\"text/javascript\">window.onload = onLoad('" + this.ClientID + "','ListePersonne');</script>");
                }
                this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), ListeSelectionPersonne.scriptRessource);   
                this.Page.ClientScript.RegisterClientScriptResource(this.GetType(),ListeSelectionPersonne.scriptFwkJs);
       }
    A partir de la quand mon control est généré je peux récupéré son instance dans la page ou je l'ai posé et utilisé mes méthodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     var listePersonne = __GetElementById("ListeSelectionPersonne");
                if (listePersonne) {
                    if (!listePersonne.IsSomebodySelected()) {
                         // traitements
                    }
                }
    Je ne sais pas si c'est le plus optimisé mais ca fonctionne

    Mamat.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. synchronized, verrou sur méthode ou toute l'instance?
    Par 0redd dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 02/09/2010, 03h08
  2. [Javascript][Firefox] méthode click() sur une balise A
    Par jothi35 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/02/2006, 14h36
  3. question sur les attributs javascript
    Par PAYASS59 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/04/2005, 13h34
  4. Alimenter le context sur un appel Javascript ?...
    Par Sylvain James dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/10/2003, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo