J'essaie de charger de manière dynamique un contrôle de l'utilisateur dans un site ASP.WEB. Cependant, en raison de la configuration de la configuration des sites Web ASP.NET (je pense), je ne suis pas en mesure d'accéder à la définition de type de type du contrôle de l'utilisateur.
Je reçois un message disant que ma classe He_ContentTop_webControl1 est: SE NOM DE TYPE OU NAME NAME "He_ContentTop_WebControl1" est introuvable (manquez-vous une directive à l'aide d'une référence ou d'une référence d'assemblage?) P>
aucune idée de la manière dont cela pourrait être fait pour fonctionner? J'ai tenté d'utiliser l'espace de noms, mais il me semble que les sites Web ASP.NET ne sont pas conçus pour fonctionner avec des espaces de noms par défaut. Je serais intéressé par une approche d'espace non-noms. p>
tia p>
6 Réponses :
En supposant que le contrôle existe dans le même assemblage que votre projet Web, vous devez ajouter une directive de référence dans votre fichier .aspx,
par exemple: p> À l'esprit, cela prend souvent quelques minutes (ou parfois une construction) pour que IntelliSense reprenne cela. p> p>
Merci beaucoup. J'avais supposé que la référence n'était pas nécessaire si j'ai signalé l'emplacement du fichier de code. Il semblait un peu redondant d'ajouter le dossier, mais j'ai fait une hypothèse ...
Si vous avez affaire à beaucoup d'usercontrols, je ne recommanderais vraiment pas cette approche. Dans mon expérience, la solution pour ajouter les UserControls à un espace de noms puis les charger de manière dynamique est beaucoup plus polyvalente.
Oui, c'est un peu redondant mais fondamentalement la directive de référence est pour ASP.NET afin qu'elle puisse réellement résoudre la distribution de la page.loadControl à l'heure appropriée. Heureux d'avoir pu aider!
Ajouter une balise ci-jointe <% @ Control de référence = "~ / Controls / webcontrol1.ascx"%>
Il peut facilement être fait en utilisant des espaces de noms. Voici un exemple:
webcontrol1.ascx: p> remarque que hérités forte> Références L'espace de noms (myuserercontrols), et pas seulement le nom de la classe ( Webcontrol1) p> webcontrol1.ascx.cs: p> Notez que la classe a été incluse dans la catégorie Espace MySeControls P> défaut. ASPX.CS: P> using MyUserControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var control = (WebControl1) Page.LoadControl("~/WebControl1.ascx");
}
}
Où mettre ce fichier ASCX? Si je le mettais là où je ne peux pas importer un espace de nom à moins que je n'en mettit dans le répertoire App_code. Si je mettais dans l'annuaire App_code, cela me donne alors une erreur que vous ne pouvez pas la mettre là-bas
Que voulez-vous dire que vous ne pouvez pas importer d'espace de noms?
Nom Space Myusercontrols .. Où mettre le fichier ASCX (dans AppCode ou Bin). Je l'ai mis dans le dossier Controls mais cela ne reconnaît pas Nom Space Myusercontrols.
Upédé parce que cela résout le problème dans Visual Studio et Msbuild.
La référence ne suffit pas à l'aide de
AnySpaceName.WebControl1 WC = (AnySpaceName.WebControl1)Page.LoadControl("~/WebControl1.ascx");
Casting de la commande de l'utilisateur de cette façon peut créer de nombreux problèmes .My approche consiste à créer une classe (par exemple la classe de contrôle) Placez toutes les propriétés et la méthode dont vous avez besoin pour la coulée et hériter de cette classe à partir de System.Web.UI.USERCONTROL .Ce dans votre fichier de code Cotrol au lieu de System.Web.UI.USERCONTROL Utilisateur de cette classe de contrôle. P>
Maintenant, lorsque vous avez besoin de casting, jeté uniquement avec cette classe. Ce sera également la lumière légère. P>
Le sujet de ce message est un peu trompeur. Si vous souhaitez simplement ajouter un contrôle de manière dynamique, vous n'aurez pas à référencer le contrôle et, par conséquent, vous pouvez simplement l'ajouter avec quelque chose de simple comme: sans espace de noms Hassel. P> p>
Les espaces de noms ne sont pas pris en charge sous le modèle de site Web. En tant que tel, je ne pouvais pas obtenir aucune des solutions proposées au travail. Cependant, il y a une solution. Créez une interface et placez-la dans le code de l'application, puis mettez l'interface dans le contrôle de l'utilisateur. Vous pouvez lancer à l'interface et fonctionne. P>
Merci, cela m'a aidé à mettre en œuvre la solution de TCHAMI dans un «site Web» que je travaille. Comme vous l'avez dit, je ne pouvais pas faire référence à la classe d'abord, mais avec votre explication et votre suggestion d'une interface, elle fonctionnait maintenant parfaitement!
N'oubliez pas que vous devez également mettre ce contrôle chargé quelque part sur la page, par exemple. un espace réservé.