begin process at 2012 05 28 05:27:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Divers

 > 

Autre

 > 

Problème de communication entre C# et ASP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de communication entre C# et ASP

mercredi 19 juillet 2006 à 17:22:28 | Problème de communication entre C# et ASP

prowlx

Voici mon problème:
J'ai créé une page ASP par défaut avec le  Web Development kit Express 2005 de MS
(donc utilise le framework .Net 2.0).

Cette page s'appele Default.aspx et le code C# qui lui est associé est Default.aspx.cs.
Cette page communique très bien avec les namespaces contenant d'autres classes C#.
Elle peut appeler les méthodes sur les pages C# par exemple : facadeUI.login(); Cela
fonctionne très bien.

Par contre, je me suis créé une fonction public dans la page web Default.aspx.cs soit
setNickName(string strNickName). J'aimerais pouvoir appeler cette méthode à partir des
classes C#. Je n'y arrive pas.

Comme vous pourrez le constater dans le code de Default.aspx.cs, j'envoie ma page courrante
à ma classe C# (FacadeUI facadeUI = new FacadeUI(this)). Dans ma classe facadeUI, je ne sais
pas quel type de classe lui donner pour pouvoir accéder aux méthodes publiques de ma page web.
On dirait qu'il n'y pas de namespace pour le using afin d'obtenir le type de "classe" de la
page web.
Voici le code du constructeur de ma classe C# facadeUI.
        public FacadeUI(Page frmlogin)
        {
            this.frmlogin = frmlogin;
  // J'aimerais pouvoir faire : frmlogin.setNickName("Toto");
  // mais ne trouve pas la méthode puisque c'est du type Page...
        }

J'ai mis comme type de classe Page. Bien sûr il faudrait qu'il y ait un type _Default ou
ASP.DefaultPage... ou quelque chose comme ça afin que je puisse accéder à
setNickName(string strNickName).

Donc mon problèm :
 ASP vers C# fonctionne très bien (capable d'appeler facadeUI.login())
 C# vers ASP ne fonctionne pas (pas capable d'appeler setNickName("Toto"))


Voici le code de Default.aspx.cs :

__________________________________________________________________________________
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

//Namespace pour les classes C#
using Client.Controler;
using Client.Model;
using Client.View;
using Client.PatternObserver;
using Client.Remote;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {    
 FacadeModel facadeModel = new FacadeModel();
 FacadeUI facadeUI = new FacadeUI(this); //On lui donne la page courrante
 facadeUI.login();
    }

    public void setNickName(string strNickName)
    {
 this.TextBox1.Text = strNickName; //TextBox1 est protected...
    } 
}
__________________________________________________________________________________

Merci,
Prowlx

mercredi 19 juillet 2006 à 22:48:01 | Re : Problème de communication entre C# et ASP

jesusonline

Membre Club Administrateur CodeS-SourceS
Bonsoir,

Je pense que tu devrais d'avantages te documenter sur la notion d'objet en .net :-)

Pour résoudre ton problème il suffit de créer un nouveau fichier de classe (que l'on met dans le dossier app_code) dans cette classe tu met les propriétés et méthodes que tu veux (static ou non) tu peux ensuite appeller ces méthodes dans toutes les pages que tu veux ...



Cyril - MVS - MCP
mercredi 19 juillet 2006 à 23:33:54 | Re : Problème de communication entre C# et ASP

prowlx

Comme je l'ai spécifié, je suis capable d'accéder à mes méthodes C# des classes qui se situe dans app_code (ex:  facadeUI.login()) à partir de la page web (Default.aspx.cs). Le problème n'est pas là. C'est de l'autre sens que je n'arrive pas à appeler des méthodes de ma classe reliée à ma page web(Default.aspx.cs) à partir d'une classe C# qui se trouve dans app_code.

Pour être plus clair :
Voici un bout de code C# qui se trouve dans app_code :
   public FacadeUI(Page frmlogin)
        {
            this.frmlogin = frmlogin;
        }

Dans ce constructeur, je ne peux pas appeler la méthode frmlogin.setNickName("Toto") puisque frmlogin (qui est passé en paramètre) est de type Page qui est défini par .Net et non pas un type défini par moi (comme le nom d'une classe C#)... Je n'arrive pas à trouver le type qui devrait être, selon moi, ASP.Default ou quelque chose comme ça.

Merci
mercredi 19 juillet 2006 à 23:46:59 | Re : Problème de communication entre C# et ASP

jesusonline

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Tu ne peux pas faire ca, car tu ne connais pas encore le type de ta page, il est définit pendant la compilation :s ce que tu peux faire par contre c'est faire implementé ta classe d'une interface que tu définis et comme ca tu peut spécifier les méthodes qu'a ta page :-)

Mais je ne comprend vraiment pas ce que tu veux faire, la couche logique n'a pas a accedé à la couche présentation ! seulement l'inverse :S


Cyril - MVS - MCP
jeudi 20 juillet 2006 à 14:06:03 | Re : Problème de communication entre C# et ASP

prowlx

Salut Cyril,
Je vais essayer en implémentant une interface. Je t'en redonnerai des nouvelles.

Je suis d'accord avec toi que la couche présentation ne devrait pas être accéder directement par la couche logique, mais parfois le Modèle doit mettre à jour (update) les Vues qui lui sont associées de façon indirecte (par le pattron Observateur-Observé ou par le Contrôleur du pattron MVC).

Par exemple, mon application est multi-client (de type clients-serveur) pour une application de bavardage. Lorsqu'un client change sont état (ex: Occupé) -> le serveur se met à jour. Le serveur doit alors aviser (notifier) tous les clients qui sont associés au contact qui vient d'être modifié. C'est ainsi qu'un nouveau thread est lancé sur les clients pour mettre à jour leur Modèle. Lorsque le modèle est mis à jour, il doit bien sûr en aviser les Vues (GUI par l'Observateur : méthode update) qui lui sont associé pour changer l'état du client qui vient d'être modifié.
C'est pour ça que les Vues doivent être indirectement mises à jour lors d'une modification du Modèle!

Une autre réponse d'un autre forum pour ma question est celle-ci :
    quand tu lui passes ta page frmlogin ta methode sait qu'elle est de type class_default. donc quand tu peux faire une frmlogin.setNckName()
    il te suffit de caster dans ta méthode comme ceci.
    _Default toto = mapage as _Default.

Je vais essayer ça aussi!

Merci,
Prowlx


jeudi 20 juillet 2006 à 14:23:28 | Re : Problème de communication entre C# et ASP

jesusonline

Membre Club Administrateur CodeS-SourceS
Une autre solution est de passer par la reflection mais c'est un peu lourd *-) une interface c'est beaucoup plus propre ;-) et surtout ca évite que tes 2 couches soient dépendantes l'une de l'autre ...

Ce que tu peux faire pour ton problème c'est un gestionnaire d'évenement !

t'as une classe connectionManager qui possede un evenement ChangeState les "clients" (tes pages) s'abonnent à cet évenement et dés que le connectionManager lance l'evenement tous tes clients sont updaté ...


Cyril - MVS - MCP
vendredi 21 juillet 2006 à 16:07:51 | Re : Problème de communication entre C# et ASP

prowlx

Réponse acceptée !
Salut Cyril,
Merci pour tes conseils puisque l'implémentation d'une interface fonctionne très bien!

Le seul point faible est que chaque page ASP qui contient des méthodes publiques qui doivent être appelées par le déclenchement d'une mise à jour du Modèle, doit implémenter une interface... Donc si j'ai 5 pages ASP, il faut que j'aie 5 interfaces, mais c'est la seule façon. Je trouve ça platte que je ne puisse pas lui passer le type de classe par exemple : Default (du fichier Default.aspx.cs), mais au moins lorsque je lui fais implémenter l'interface : ILoginUI (contenant une définition d'une méthode : void setNickName(string strNickName)) je peux l'appeler dans une autre classe C# de cette façon :

private ILoginUI frmlogin;

public FacadeUI(ILoginUI frmlogin)  //constructeur d'une autre classe C# soit du patron Façade
        {
              this.frmlogin = frmlogin;
              frmlogin.setNickName("Toto");
        }

Afin de découpler le Modèle des Vues, j'ai utilisé le patron Facade. Donc j'ai une classe FacadeModele et une classe FacadeUI (comme l'exemple) qui ne fait que rediriger les appels de méthodes aux bonnes classes. Donc les Vues ne connaissent pas toutes les classes formant le modèle mais seulement sa façade.

Pour ce qui est du gestionnaire d'événements, je trouve sincérement que le gestionnaire d'événements ressemble beaucoup au patron Observer. Mon modèle (FacadeModele) est un Observable (public class FacadeModel : Observable) :

namespace Client.PatternObserver
{
    public class Observable
    {
        ArrayList listObservers = new ArrayList();

        public void addObserver(IObserver observer)
        {
            listObservers.Add(observer);
        }

        public void removeObserver(IObserver observer)
        {
            listObservers.Remove(observer);
        }

        public void notify(Object args)
        {
            notify(args, null);
        }

        public void notify(Object args, Object myObject)
        {
            foreach (IObserver observer in listObservers)
            {
                observer.update(this, args, myObject);
            }
        }
    }
}

Il contient une liste de tous les Observeurs (qui est un listener les événements). Lorsque j'appele une méthode (qui est un événement) de mon modèle qui doit faire une modification des Vues, j'appele notify(...). Le notify va appeler la méthode update (mis à jour) de tous les Observeurs qui lui sont associés.

namespace Client.PatternObserver
{
    public interface IObserver
    {
        void update(Observable observable, object args, object myObject);
    }
}

C'est dans cet Observeur que je fais la gestion des événements reçu. La méthode update peut alors rediriger les mises à jour vers la FacadeUI (qui elle la retransmet vers les pages ASP) selon les paramètres reçus.

Donc on peut dire que le gestionnaire d'événements fonctionne sensiblement de la même façon que le patron Observer.

Merci,
Prowlx


Cette discussion est classée dans : web, page, system, using, facadeui


Répondre à ce message

Sujets en rapport avec ce message

Double appel Page_Init avec un controle ImageButton ou Image [ par guilhemberthalon ] Bonjour,j'ai un problème plutôt bizarre avec les contrôles ImageButton et Image,Lorque j'ajoute un de ces contrôles dans une page aspx, la page est ch dropdownlist + alert javascript sous firefox => problème [ par gr54 ] Bonjour à tous, J'ai développé une appli asp.net et c# (3.5) qui utilise une dropdownlist, le tout en ajax via un updatepanel. Dans certains cas, j'a Probléme de rafraichissement de gridview a partir d'un TreeView .. Helpppp [ par kenzasana ] Bonjour j'essai d'afficher une page web dans laquelle j'offre une navigation dans les dossier exactement comme l'exporateur windows pour les dossier. Tableay <table> dynamique [ par cheverny ] Bonjour à tousComme bien d'autres avant moi, je débute en asp.net. Je travaille avec C#.le problème que j'ai a déja été abordé par plusieurs personne Probleme asp.net lien [ par imer59 ] Bonjour , je suis tout nouveau dans ce langage et j'ai un petit problème je vous explique :Je suis en stage et je dois développer un espace de télécha connection mysql asp.net C# [ par polo86 ] salut, Je réalise un projet (site web) sous visual studio 2008 avec une db mysql. J'ai donc installé le connector 5.2 de mysql, j'ai ajouté la db à l' remplir une Bdd sql serveur a travers un formulaire Asp.net [ par maminos_ead ] Salut a tous; j'ai crée une base de donnée avec sql server a travers Visual Studio 2005 et un formulaire dans une page.aspx mais mon probelme est le Probléme procédure stockée+asp.net [ par gourou00 ] Bonjour, Je demande votre aide pour une erreur que j arrive pas à résoudre, alors j ai utilisé une procédure stockée pour insérer les données saisies ajax et son slideshow [ par volcom20 ] je tente de faire un slideshow pour une site web dans un projet d'école mais jarrive pas à faire marcher mon service web je tente de régler le problèm Erreur Profile C# [ par jagxx ] Bonjour, J'ai ajouté le code suivant dans le fichier Web.config: Dans le codeBehind, j'aimerai accéder à ces


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales