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 :

[Débutant] accès à ma classe webform depuis un user control


Sujet :

ASP.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [Débutant] accès à ma classe webform depuis un user control
    Bonjour,
    je débute tout juste sur .net et je bute sur un problème tout bête :

    J'ai une classe SebNG.SebNGIndex (héritant de System.Web.UI.Page) qui charge dynamiquement un contrôle utilisateur SebNG.BlocsTrans (héritant donc de System.Web.UI.UserControl) avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Control ctrl = LoadControl("controls/blocstrans.ascx");
    centrePH.Controls.Add(ctrl);
    Jusqu'ici tout va bien, mon contrôle se charge bien. Mais j'ai besoin d'accéder depuis ce contrôle à une propriété (publique) de mon webform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string pg = ((SebNGIndex)Page).currentPage;
    Et là, le compilateur me dit qu'il ne connait pas la classe SebNGIndex.

    Comment faire pour charger cette classe dans mon contrôle ?

    Merci pour vos réponses.

  2. #2
    Inscrit Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Points : 283
    Points
    283
    Par défaut
    Fais un casting:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TonObj to = Page.LoadControl("...") as TonObj;
    Ensuite t'oublie surtout pas de tester que ton instance d'object n'est pas null !
    Et enfin, t'accède à ta méthode/propriété publique.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je ne pense pas qu'il s'agisse d'un problème de casting. j'ai testé dans les 2 sens :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BlocsTrans ctrl = LoadControl("controles/blocstrans.ascx") as BlocsTrans;
    dans mon WebForm SebNGIndex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SebNGIndex test = LoadControl("../index.aspx") as SebNGIndex;
    dans mon contrôle BlocsTrans;

    Le problème semble plutôt être du fait que BlocsTrans ne connait pas la classe SebNGIndex qui l'a chargée. Le compilateur me renvoie une erreur du type suivant :
    CS0246: Le type ou le nom d'espace de noms 'SebNGIndex' est introuvable

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Ne pas confondre "casting" (pour recruter des acteurs) et "cast" (ou trans-typage en français, mais c'est vraiment trop long à dire et à écrire).

    Ensuite, pour le pb, c'est juste que ton Type SebNGIndex est déclaré dans un namespace et qu'à l'endroit où tu veux t'en servir, t'as pas mis ton using.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Désolé, j'arrête de conjuguer les termes informatiques ;-)

    Pour mon problème, ce n'est malheureusement pas un using manquant : mes 2 classes sont dans un namespace SebNG et j'ai bien un
    au début de chaque fichier.

    Je dois préciser que j'écris mon code sur Dreamweaver et que je ne compile rien du tout, me contentant de placer les fichiers sur un serveur. Peut-être y a-t-il une configuration à ajouter pour référencer mes classes ?

  6. #6
    Inscrit Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Points : 283
    Points
    283
    Par défaut
    Je suis surpris qu'on puisse pas dire casting. Et je m'explique: un object de type1 que veut jouer le role d'un object de type2, il passe un casting, et s'il réussis (!=null) alors il à le role... C'est donc bien un casting !

    Sinon, plus sérieusement, peux-tu donner le namespace complet de tes 2 classes ?

    Parce que vu le type d'erreur que tu as, ça à quand même furieusement l'air de manquer de using.

    ou alors,...t'as pas 2 projects différents ds lesquels tu aurais oublié de faire un include reference ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je n'ai pas du tout de project (j'imagine que c'est un truc de Visual Studio mais j'utilise dreamweaver) mais cette histoire d'include reference m'intéresse fortement, je pense que c'est ce qui me manque : une manière de référencer mes types sans passer par une compilation.

    En fait j'ai 2 fichiers dont voici les en-têtes :

    index.aspx.cs :
    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
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Xml;
    using System.Xml.Xsl;
    using System.IO;
    using System.Text;
    using SebNG;
     
    namespace SebNG {
    	public class SebNGIndex : System.Web.UI.Page {
    controles/blocstrans.ascx.cs :
    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
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data;
    using System.Data.SqlClient;
    using SebNG;
     
    namespace SebNG {
     
    	public class BlocsTrans : System.Web.UI.UserControl {
    Je pensais que puisque c'est un objet SebNGIndex qui charge un objet BlocsTrans, mon type SebNGIndex serait référencé mais ce n'est apparemment pas le cas. J'imagine que les contrôles résultent d'un processus distinct...

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je n'ai toujours pas résolu mon problème mais j'ai ajouté des tests.

    Voilà déjà mes en-têtes de fichiers.

    index.aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <%@ Page Language="C#" Inherits="SebNG.SebNGIndex" Src="index.aspx.cs" ClassName="SebNGIndexWF" %>
    <%@ Reference Control="./controls/blocstrans.ascx" %>
    index.aspx.cs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    using SebNG;
    namespace SebNG {
    	public class SebNGIndex : System.Web.UI.Page	{

    controls/blocstrans.ascx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ Control Language="C#" AutoEventWireup="true" Src="blocstrans.ascx.cs" Inherits="SebNG.BlocsTrans" ClassName="BlocsTrans" %>
    controls/blocstrans.ascx.cs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    using SebNG;
    namespace SebNG {
    	public class BlocsTrans : System.Web.UI.UserControl {

    J'ai du rater un truc puisque je ne peux déjà pas caster mon controle quand je l'inclue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BlocsTrans ctrl = (BlocsTrans) LoadControl("controls/blocstrans.ascx");
    me renvoie le désormais fameux "CS0246: Le type ou le nom d'espace de noms 'BlocsTrans' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)"

    J'ai aussi essayé d'afficher le type de mon objet Page et je ne comprends pas.

    Dans mon SebNGIndex.Page_Load :

    (typeof(Page)).FullName = System.Web.UI.Page
    (this.GetType()).FullName =ASP.SebNGIndexWF
    Type.GetType('SebNG.BlocsTrans') =
    Type.GetType('SebNG.SebNGIndex') =SebNG.SebNGIndex


    Dans mon BlocsTrans.Page_Load :

    (typeof(Page)).FullName = System.Web.UI.Page
    (Page.GetType()).FullName =ASP.SebNGIndexWF
    Type.GetType('SebNG.BlocsTrans') =SebNG.BlocsTrans
    Type.GetType('SebNG.SebNGIndex') =

    Je commence à désespérer, vraiment personne n'a une idée ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/01/2013, 17h56
  2. Apeller une méthode depuis un user control
    Par Shonkukai dans le forum C++
    Réponses: 5
    Dernier message: 13/02/2009, 09h35
  3. [débutant]Accès à une classe
    Par carlou135 dans le forum C++
    Réponses: 4
    Dernier message: 22/04/2008, 09h37
  4. [Débutant] - Accès à GTK depuis une classe
    Par Leobaillard dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 03/06/2007, 13h09
  5. [WebForms]Probleme de user control créé dynamiquement
    Par Kurukuru dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 04/01/2007, 12h27

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