2009-10-19 6 views
2

Je travaillais sur un projet vb.net et je ne pouvais pas trouver des contrôles dans le fichier code-behind (*. Vb). Je me demandais si c'était parce que je travaillais dans la fonction page_load, donc les contrôles ne sont pas chargés qu'après l'événement page_control. Cependant, j'ai pu les trouver avec la fonction findcontrol de l'objectif formview.contrôles dans le code derrière

+0

Veuillez fournir votre fichier ASPX et un échantillon code-behind. – Restuta

+0

c'est vraiment générique. un littéral asp dans le fichier aspx et je le cherche dans la fonction page_load dans le fichier vb –

Répondre

0

Les contrôles feraient partie d'une classe partielle dans la même solution. Trouvez simplement toutes les références pour votre nom de classe.

+0

Avez-vous vérifié le contenu de InitializeComponent()? –

+0

quel fichier contient encore cette fonction? J'avais l'habitude de le voir dans un projet C#. pas dans mon projet vb actuel. –

0

J'ai parfois des problèmes avec l'ajout d'un contrôle à une page et l'Intellisense ne reconnaît pas le contrôle. Le compilateur semble également ne pas reconnaître le contrôle et empêche le projet d'être compilé. Cela peut être très frustrant et je n'ai vraiment pas compris pourquoi.

Parfois, il est utile de fermer la page aspx et son fichier de code, fermant parfois Visual Studio et la réouvrant fonctionne. Parfois, rien ne fonctionne et j'essaie juste une autre façon de faire avancer les choses.

Je ne sais pas si c'est ce que vous vivez, mais si c'est le cas, cela peut certainement vous faire gratter la tête et vous demander ce qui se passe.

+0

a tenté la fermeture VS web. n'a pas fonctionné. –

1

Si les contrôles sont déclarés dans l'aspx, ils sont définis en classe partielle équivalente pour votre classe Page. Cela a été introduit avec .Net v2.0 afin que déconner avec le concepteur ne serait pas bousiller avec votre code derrière le fichier (ce qui a causé pas mal de problèmes dans certains cas).

Vous pouvez accéder aux commandes depuis votre événement Chargement de page. Parfois, IntelliSense vous joue des tours et ne suggère pas le contrôle. Il suffit de taper. Cela fonctionnera. Vous pouvez fermer la page aspx et l'ouvrir à nouveau. Parfois, cela le corrige. Ou redémarrez simplement Visual Studio si cela vous ennuie.

Cependant, il existe quelques considérations si vous souhaitez accéder aux données de contrôle à certains moments du cycle de vie de la page. contrôles de serveur ont leur propre cycle de vie qui est semblable au cycle de vie Page, mais l'ordre dans lequel l'événement est déclenché pour les commandes est la suivante:

  1. Init et Unload événement pour un contrôle se produit avant l'événement est déclenché pour le conteneur (bottom-up).
  2. Load l'événement se produit pour le contrôle après l'événement est déclenché pour le conteneur (de haut en bas).

Vous pouvez trouver une explication plus détaillée du Page life cycle events on MSDN.

+0

c'est confus. pour clarifier, événement Init et Unload pour un contrôle se produit avant que l'événement init et unload est levé pour le conteneur parent direct, comme un formulaire? –

+0

C'est correct. Donc, si vous avez une étiquette sur une page, l'événement Init sera d'abord déclenché sur votre étiquette, puis sur votre page. –

2

Les contrôles à l'intérieur des modèles (comme dans votre FormView ou dans un GridView) ne sont pas directement accessibles dans le code derrière. Vous devez utiliser FindControl pour accéder à ces contrôles.

+0

Y a-t-il une raison pourquoi? –

+2

Je ne suis pas certain de la raison pour laquelle FormView fonctionne comme il le fait, mais pour GridView, le contrôle existe dans chaque ligne, il y a donc plusieurs versions du contrôle sur la page. Par conséquent, vous devez utiliser FindControl sur le conteneur approprié pour rechercher le contrôle au moment de l'exécution. –

+0

Le futur vous remercie. –

1

Il est difficile de dire exactement quel est le problème; cela aiderait si vous pouviez poster du code ici.

J'ai deux suppositions/suggestions:

  1. Si vous avez le problème brentkeller est décris, ce qui corrige généralement cela complètement pour moi supprime le fichier aspx.designer.cs, puis un clic droit dans le fichier .aspx et sélectionnez "Convertir en application Web". Cela recrée le fichier du concepteur.

  2. Le contrôle est à l'intérieur d'un modèle comme suggéré par Jason Berkan. Si c'est dans un LoginView, par exemple, vous utiliserez .FindControl ("controlId") sur le LoginView.

Questions connexes