2010-12-07 5 views
-8

J'écris un formbuilder pour notre CMS qui charge dynamiquement des contrôles sur mesure dans des panneaux dans un répéteur. Les contrôles sur mesure dont tout hérite, disons 5arx.FormBuilder.FormControl, une classe de base qui définit des méthodes abstraites pour initialiser, valider, repeupler, rassembler des données soumises à partir de celles-ci. Les contrôles s'étendent de simples champs de texte à des contrôles complexes composites côté client.Des contrôles ajoutés dynamiquement finissent enveloppés dans un type générique?

Tout fonctionne très bien, mais j'ai remarqué quelque chose que je trouve anormal. Au cours de l'écriture du code pour récupérer les contrôles de formulaire. rassembler leurs données et les conserver dans ma base de données J'ai remarqué que leur type revient à la façon dont les objets sont tapés si vous écrivez votre code dans le mode «projet de site Web (v. irritant) VS».

Ainsi, par exemple un contrôle qui est défini comme vivant dans un espace de noms et d'être de type

5arx.FormBuilder.FormControl.MyBespokeControl Sarx.FormBuilder.FormControl.MyBespokeControl

lors de l'exécution indique le type (par simple appel à GetType()) comme étant du type:

ASP.5arx_FormBuilder_FormControl_MyBespokeControl

ASP.Sarx_FormBuilder_FormControl_MyBespokeControl

Obtenir la propriété BaseType récupérera correctement la classe sous-jacente, mais il me laisse perplexe pourquoi cela devrait se produire. D'autant plus que j'ai passé une grande partie de l'été à refactoriser notre application de sa forme originale en projet VS Website (complète avec code partagé dans le dossier App_Code et autre méchanceté) au projet d'application web correct (IHMO) + supportant les librairies claass afin que nous ayons le contrôle de nos espaces de noms et ne pas avoir tout compilé dans l'espace de noms ASP.x :-(

J'apprécierais vraiment une explication/clarté

EDIT:. modifié (hypothétique) par exemple espace de noms racine

+0

@Will - Pourquoi avez-vous supprimé les échanges qui ont suivi? Pas tant de modération que de censure. Je demande que le contenu soit rétabli. – 5arx

+0

@MichaelPetrotta - vous avez pris beaucoup de peine à castrer cette question, mais omis d'exciser la phrase incriminée. > Disons '5arx. – 5arx

+0

@ 5arx: Pas de problème du tout. Je ne sais pas ce que vous voulez dire par offense à la phrase - on dirait qu'il y a eu une discussion animée avant d'arriver ici.Si vous voulez le supprimer, modifiez simplement votre question. –

Répondre

2

. Apparemment, cela permet aux fichiers ASPX d'être mis à jour et recompilés indépendamment de votre code-behind.Le type de contrôle/page est dérivé du type que vous écrivez dans le code.

Voir this article (à partir de 2006, mais toujours apparemment pertinent :) pour plus de détails.

Je ne peux pas dire que je sais beaucoup de choses sur ASP.NET, mais selon l'article, il semble que ce soit indépendant du fait qu'il s'agisse ou non d'un projet "site web". Je suppose que chaque fois que vous avez un fichier XML de style (aspx, ascx etc), le compilateur d'exécution ASP.NET fera tout cela pour vous.

Que cela se produise ou non si vous précompiler le site, je ne sais pas.

+10

@ 5arx: Il n'a pas vraiment pris de * connaissances * du tout. Il a fallu une recherche Google pour "asp.net class generation asp namespace msdn" :) –

+2

Oui, il le fait aussi pour précompilé. C'est le "nouveau" modèle de compilation ASP.Net 2.0. Je dis nouveau parce qu'il a été mis à jour à partir de l'ancien modèle 1.1. Fondamentalement, l'ensemble de votre site Web est compilé en une seule assemblée. C'était un changement radical par rapport au modèle de compilation 1.1. Je crois qu'il existe un commutateur de ligne de commande qui contrôle cela aussi dans la version 2.0 - je ne me souviens pas du haut de ma tête mais je me souviens que les gars du CM l'ont ajouté à nos scripts NANT. – SRM

Questions connexes