1

Salut,
Le message parait clair, et pourtant je n'arrive pas à comprendre ce qui cloche...

En fait j'ai deux contrôles ASCX, tous deux dans le même namespace. Dans l'un d'eux, je souhaite juste récupérer un typeof sur le type de l'autre

exemple :
namespace plip.plop 
{
   public partial class Huhu
      : System.Web.UI.UserControl
   {
      protected void BtSearch_Click( object sender, EventArgs e )
      {
         string s1 = typeof(Hoho).Name; // veut pas compiler :(
      }
   }
}


Et dans mon autre fichier ASCX (enfin dans le .CS tongue)
namespace plip.plop 
{
   public partial class Hoho
      : System.Web.UI.UserControl
   {
      //...
   }
}



Z'avez une idée de pourquoi ça ne veut pas fonctionner ? confus
Merci d'avance !

PS : Je vais essayer de faire un petit testcase...


PS : je me doute que c'est une erreur de gros newbie mais bon.. tongue

2

Même namespace, mais pas même projet j'imagine ? T'as vérifié que t'as bien ajouté la référence au projet de l'autre contrôle ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

Si, si ! C'est le même projet ! couic

4

Ah ouais, alors là, euh... hum
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

lVOM


confus

6

Ben il n'y a pas de namespace { ... } dans ton screenshot, justement ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

Dans cet exemple, non, mais l'erreur est la même de toutes façons... sad

Voilà WebUserControl2 :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class WebUserControl2 : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

8

(faut que j'y aille, je repasse tout à l'heure tongue)

9

Tu peux pas faire ce genre de choses quand tu crées des usercontrols en mode design, le seul moyen pour avoir un type connu dans le reste du projet est de créer un usercontrol par code (qui derive d'usercontrol donc) et le placer dans le dossier App_Code smile
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

10

couic2
Bon, eh bien... Merci ! smile
C'est pour forcer l'indépendance des contrôles ?
Mais alors comment ça se fait que ça marchotte quand même ? (l'exemple du screenshot fonctionne plus ou moins en fait, mais affiche l'erreur un peu après la compilation/exécution réussie #trigolfus#)

11

Pour faire simple ... c'est dû au fonctionnement des projets WebSites (sur systeme de fichier).
Les contrôles ne sont pas tous dans une dll commune et sont compilés au 1er appel ... lorsque tu codes les objets ne sont donc pas interconnectés.
D'ailleurs quand tu places un usercontrol dans une page, lorsque tu vas dans le code behind et que tu tapes this.nomducontrolquetasplacésurlapage, quand tu pointes avec la souris dessus, tu verra que son type ne correspond pas du tout à celui que tu connais (ca sera du genre ASP.nomducontrole_ascx) ... ce sont des objets temporaires que visual studio créée à la volée quand tu construit ton site.

Si tu veux qu'ils le soient tu peux créer un projet WebApplication. A ce moment là tts u auras accès à tous tes objets dans tout le projet, mais la sortie sera un site web compilé dans une DLL smile
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

12

Merci, encore une fois hehe
Pff, faudrait vraiment que je lise un bouquin, mais je n'ai pas trop le temps.. Tu en as un à conseiller ?

13

J'ai un bouquin oui, mais il fait 1000pages et est en anglais .... bon apres t'es expert asp.net si t'as le courage de tout lire grin Si t'es interessé envoie moi un mmsg smile

Autrement il y a la msdn très complete .... faudrait un jour que je fasse aussi une compil des blogs dev .NET interessants, ca pourrait être utile j'ai l'impression ^^
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

14

Merci hehe²

15

Mais pourquoi la "régénération du site web" échoue, et pas la génération que je fais juste après cet échec de régénération ? C'est quand même pas super intuitif hum

16

Résumé du comportement, dans l'ordre :

- je régénère la solution : OK
- je régénère le site web : échec
- je force quand même l'exécution (CTRL+F5) : échec au runtime avec la même erreur (jusque là, c'est cohérent)
- je génére la solution : OK
- j'exécute directement avec CTRL+F5 : fonctionne, aucune erreur au runtime... !

#trihum#

17

J'ai pas ce comportement là .... le site ne se lance jamais : tu peux m'envoyer ton dossier que je regarde ?

PS : CTRL + F5 ne force rien, ca lance juste le site sans le mode debug.
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

18

(Je veux dire que je "force" l'exécution malgré l'erreur de régénération du site web)

Pour le comportement louche, je vais voir si je peux isoler ça dans mon exemple smile
À noter que ça ne passe qu'avec un type de contrôle en particulier (avec les autres ça échoue quoi qu'il arrive grin)

19

Bon chez moi ca marche dans tous les cas (VS 2008) ... en fait c'est visual studio qui doit se perdre dans les références car la sortie est bien :

WebUserControl 
WebUserControl2


Pour voir ce qui se passe tu peux te rendre ici :

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\

Tu y verras les dll compilées de ton site, grosso modo tes controles sont compilés dans le meme namespace :

namespace ASP
{
    [CompilerGlobalScope]
    public class webusercontrol_ascx : WebUserControl

    [CompilerGlobalScope]
    public class webusercontrol2_ascx : WebUserControl2
}


il est donc normal qu'a l'execution ca passe.

Par contre visual studio, pour qu'un type soit connu partout dans le projet, il doit être dans App_Code, c'est pour ca qu'il ne te colorie pas ton type ...

Ensuite pour te dire pourquoi une fois ca plante chez toi et une autre fois non, là j'ai pas d'idée qui me vient grin
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

20

grin
Merci beaucoup smile
(sur cet exemple ça a l'air de fonctionner à l'exécution à chaque fois pour moi aussi... pour l'instant grin)

Enfin c'est quand même moyennement propre tout ce projet... (euphémisme inside... couic2)

21

Salut,
Finalement j'ai trouvé une solution pour pouvoir utiliser un contrôle dans un autre : il suffit de déclarer le contrôle à utiliser dans le ASCX.
e.g. :
Disons qu'on a un contrôle MainControl.ascx, et qu'on veut utiliser le contrôle TheControlIWantToUse dans le code du MainControl.ascx.cs : on doit juste référencer TheControlIWantToUse dans MainControl.ascx.
<%@ Register Src="TheControlIWantToUse.ascx" TagName="TheControlIWantToUse" TagPrefix="uc1" %>
Grâce à ça, la classe TheControlIWantToUse est visible depuis MainControl.ascx.cs hehe

22

Le TagName correspond au nom de la propriété qui va être crée et qui va te permettre d'accéder au contrôle.
Dans le code aspx tu vas donc utiliser <uc:TheControlIWantToUse ..> pour afficher ton controle.

Et comme dit précédement le type de retour de la propriété dans le code behind sera ASP.typedetoncontrole_asx. (et pas le type réel de ton contrôle ^^).
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)