web-dev-qa-db-fra.com

Impossible d'accéder à l'ID de contrôle dans le code situé derrière

J'ai le code suivant dans ma page aspx:

 <asp:Button runat="server" ID="myButton" Text="hello" />

et ceci dans mon code derrière:

protected void Page_Load(object sender, EventArgs e)
{ 
    myButton.Text = "bye"; 
}

Pour une raison quelconque, intellisense récupère l’identifiant "myButton" dans le code, mais lorsqu’il compile, il dit 

il ne peut pas construire parce qu'il ne le reconnaît pas!

Ma page est une page aspx par défaut qui utilise une page maître, le bouton se trouve dans un contrôle de contenu et tout est configuré pour s'exécuter correctement sur le serveur. La page est correctement affichée, à l'exception du problème de résolution du bouton! 

Des idées?

20
David

On dirait que votre fichier de concepteur (PageName.designer.cs) est un peu foiré. J'essayerais de supprimer le bouton de votre page et de l'ajouter à nouveau.

29
Matthew Dresser

Si le bouton est dans un conteneur de nommage tel qu'un répéteur, vous ne pourrez pas l'utiliser comme ça. Au lieu de cela, vous devez faire quelque chose comme ceci:

Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
10
Joel Coehoorn

J'ai rencontré le même problème. J'essayais tout d'abord de comprendre ce qui n'allait pas avec mon fichier designer.cs. Mais après avoir réalisé que pour mon balisage WebForm, j'utilisais un copier/coller du formulaire Web par défaut. Donc, le problème était, comme Protector un dit, assurez-vous de vérifier la propriété héritée de @Page:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
3
Kohen Holms

J'ai trouvé une solution simple pour ce cas.

Ouvrez simplement le fichier du concepteur et ajoutez une ligne correspondant à votre contrôle d'interface utilisateur.

protected global::System.Web.UI.WebControls.Button myButton;

myButton est Id de votre contrôle.

3

J'ai eu le même problème aujourd'hui et dans mon cas, la solution était:

  • Aller à: C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
  • Supprimez le dossier Temporary ASP.NET Files.
2
Vahap Doğan

je sais que ce problème est résolu, mais lorsque j’ai eu un problème similaire, lorsque j’ai converti une application Web de c # à VB - j’ai résolu ce problème en ajoutant Namespace X/End Namespace

2
Lightning3

J'ai fait face au problème et j'ai remarqué que les fichiers Designer.cs étaient exclus de mon projet.
Essayez de les rechercher, incluez-les à nouveau dans votre projet.
bonne chance

2
Dr TJ

Ça fait longtemps. Buuuut, je faisais face au même problème aujourd'hui, il semble donc qu'il n'est jamais trop tard. Pour moi, cela se passait parce que la TextBox était dans une forme non nommée. Ensuite, j'ai défini un identifiant pour le formulaire et j'ai pu accéder à la TextBox comme ceci: idForm.idTextBox.ToString(). Je suppose que cela va se passer de la même manière avec un button

1
Reginaldo Rigo

Assurez-vous qu'aucun fichier ne tente accidentellement d'hériter ou de définir la même classe (partielle). Ces fichiers peuvent être complètement indépendants de l'endroit où l'erreur est réellement apparue!

1
Protector one

J'ai rencontré ce problème à quelques reprises. Parfois, les noms de classe dans le concepteur et le code ne correspondent pas. D'autres fois, c'est l'espace de noms qui ne correspond pas. D'autres fois, la page de concepteur ne génère pas la variable membre. 

Comme mdresser l’a mentionné, la régénération très efficace du fichier de concepteur peut résoudre le problème. Assurez-vous d’abord d’enregistrer la page aspx.

1
Darthg8r

Le problème est que vous pouvez avoir plusieurs fichiers aspx avec codefile dans la directive de page pointant sur le même codebehind fichier . Il s'attend à ce que le même contrôle existe dans tous les fichiers aspx liés au même code derrière, générant ainsi une erreur de compilation.

1
Sandip.Nascar

Il suffit de changer la propriété inherit sous balise de page

    <% Page inherit = "Project_Name.otherform" 

changez le en 

    <% Page inherit = "Project_Name.YourForm"

Et vous verrez dans form2.aspx.desginer.cs que le nom de la classe est également modifié et corrigé.

Laissez-moi expliquer: Disons que vous avez 2 formulaires Web test1.aspx et test2.aspx. Vous avez copié une partie du code de test1.aspx dans test2.aspx, votre fichier test2.aspx utilisera la balise <% page en tant que:

    <% Page inherit = "Project_Name.test1"

qui était censé être comme:

    <% Page inherit = "Project_Name.test2"

pour cette raison, le nom de votre classe test2.aspx.designer.cs sera automatiquement remplacé par le même que test1.aspx.designer.cs car il s'agit d'un fichier système et vous ne pourrez pas utiliser vos ID de contrôle.

Après avoir corrigé votre propriété inherit, enregistrez et ouvrez test2.aspx.designer.cs pour le vérifier et vous verrez que le nom de la classe est également modifié . Il ressemblera à ceci:

    public partial class test1
    {
     ...

Changé en

    public partial class test2
    {
    ... 

Merci moi plus tard;) 

0
Mohammad Abraq

Vérifiez l'espace de noms dans les trois fichiers . Il y a parfois une différence entre le nom de l'espace de noms dans le fichier designer.cs et les deux autres fichiers. Assurez-vous de vérifier que le nom de l'espace de noms correspond dans les trois fichiers.

0
netfed