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 :

Bug dans le framework sur la fonction LoadControl


Sujet :

ASP.NET

  1. #1
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut Bug dans le framework sur la fonction LoadControl
    Bonjour tout le monde.

    En voulant ajouter dynamiquement un user control dans ma page, je suis tombé sur ce qui est, à mon avis, un bug du framework.

    En passant pas la méthode LoadControl("myUC.ascx"), tout va bien.
    Maintenant, si je souhaite passer des paramètres au constructeur de mon user control en passant par la méthode LoadControl(typeof(myUc), object[] params), les contrôles enfants du user control ne sont pas chargés.

    Qq'un a déjà rencontré le problème? Une solution peut être?

    Merci

  2. #2
    Expert éminent
    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
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Es-tu certain que les paramètres sont tous là et dans le bon ordre? L'intellisense fait remarquer que si il y a une erreur c'est le contructeur par défaut qui est utilisé.

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

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,

    Es-tu certain que les paramètres sont tous là et dans le bon ordre? L'intellisense fait remarquer que si il y a une erreur c'est le contructeur par défaut qui est utilisé.

    A+
    Oui, tout va bien de ce côté là, debug pas à pas à l'appui

  4. #4
    Expert éminent
    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
    Points : 9 506
    Points
    9 506
    Par défaut
    Aucun message d'erreur?

    Bon, ben un petit bout de code alors?
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Aucun message d'erreur?

    Bon, ben un petit bout de code alors?
    Bah le message d'erreur, c'est NullReferenceException quand je veux accéder à un contrôle de mon UserControl (un PlaceHolder dans le cas présent).
    En debug, j'ai bien pHolder == null qui retourne true

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    J'ai trouvé ça:

    The reason there is a difference is because in the second instance you are bypassing the binding mechanism of the the two partial classes.
    When you include the ascx control in the page as a normal declaration, the controls declared within it (the label in your example) are automatically instantiated by the framework as the class is instantiated.
    This is a binding mechnism that reads the "front-end" ascx file and instantiates objects in the class.
    When you use LoadControl(string) - you are doing exactly the same thing.. it uses a virtual path to get the "front-end" file and ensure controls within it are instantiated.
    However, when you use the new (to 2.0) LoadControl(type, object) version, there is no virtual path available and it rightly so makes no assumptions (as it cannot ensure that a type has a front end file).
    The framework cannot instantiate any controls within the ascx page and they are therefore null.
    This is why you receive an error stating that your lblInfos object is a null reference.
    Ca explique pourquoi mais pas vraiment de solution

  7. #7
    Expert éminent
    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
    Points : 9 506
    Points
    9 506
    Par défaut
    Effectivement.

    On dirait qu'il ne s'agit pas des mêmes types:
    1. Footer toto = (Footer)LoadControl("~/uc/Footer.ascx") donne ASP.uc_footer_ascx
    2. Footer ctl = (Footer)LoadControl(typeof(Footer), new object[] { 1, "toto" }) donne WebApplication1.uc.Footer
    J'imagine qu'il faut le faire en deux temps
    1. LoadControl normal
    2. Appel de la méthode qui fait le boulot de ton constructeur.

    To add UserControls you must call the LoadControl method passing in the path to the .ascx file. You can not create them by just instantiating the object the .ascx file inherits from.

    A UserControl consists of both the markup and the class in the code behind. The markup contains a link to the class behind, but the class behind does not know where the markup lives and therefore can not be created on it's own.
    En un peu plus clair. Du coup on se demande à quoi ça sert...

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

Discussions similaires

  1. Un bug d'Allegro CL sur la fonction "sort" ?
    Par Lisptic dans le forum Lisp
    Réponses: 1
    Dernier message: 15/07/2012, 09h49
  2. explication sur le fonction Sum dans qreport
    Par youcef_b_dz dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2007, 13h04
  3. Bug dans la fonction "répéter l'en-tête de groupe sur chaque page"
    Par nanouille56 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 17/10/2006, 08h04
  4. Réponses: 5
    Dernier message: 29/06/2006, 17h23
  5. [9i] bug dans la fonction transform XMLType (XSL) ?
    Par Nico57 dans le forum Oracle
    Réponses: 1
    Dernier message: 20/01/2006, 10h11

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