it-swarm.com.de

Kann nicht auf Steuerungs-ID im Code hinter zugreifen

Ich habe den folgenden Code auf meiner Aspx-Seite:

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

und das in meinem Code hinter:

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

Aus irgendeinem Grund greift der Intellisense die "myButton" -ID im Code dahinter auf, aber wenn er kompiliert wird, heißt es 

es kann nicht gebaut werden, weil es es nicht erkennt!

Meine Seite ist eine Standard-Aspx-Seite, die eine Masterseite verwendet. Die Schaltfläche befindet sich in einem Inhaltssteuerelement und alles ist so eingestellt, dass es ordnungsgemäß auf dem Server ausgeführt wird. Die Seite wird abgesehen von diesem Problem mit der Tastenauflösung ausgeführt. 

Irgendwelche Ideen?

20
David

Klingt wie Ihre Designer-Datei (PageName.designer.cs) ein bisschen durcheinander geraten ist. Ich würde versuchen, die Schaltfläche von Ihrer Seite zu löschen und sie erneut hinzuzufügen.

29
Matthew Dresser

Wenn sich die Schaltfläche in einem Namenscontainer wie einem Repeater befindet, können Sie sie nicht so verwenden. Stattdessen müssen Sie so etwas tun:

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

Ich habe das gleiche Problem festgestellt. Zuerst versuchte ich herauszufinden, was mit meiner designer.cs-Datei nicht stimmte. Nachdem ich jedoch festgestellt hatte, dass ich für mein WebForm-Markup eine Kopie/Einfügung aus dem Standard-Webformular verwendet hatte. Das Problem war also, wie Protector sagte, stellen Sie sicher, dass Sie die Vererbungseigenschaft von @Page überprüfen:

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

Ich habe eine einfache Lösung für diesen Fall gefunden.

Öffnen Sie einfach die Designer-Datei und fügen Sie eine Zeile hinzu, die Ihrem UI-Steuerelement entspricht.

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

Wo myButton ist Id Ihrer Kontrolle.

Ich hatte heute das gleiche Problem und in meinem Fall war die Lösung:

  • Gehe zu: C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
  • Löschen Sie den Ordner Temporary ASP.NET Files.
2
Vahap Doğan

ich weiß, dass das Problem gelöst ist, aber wenn ich ein ähnliches Problem hatte, wenn ich die Webanwendung von C # in VB konvertiert habe, habe ich dies durch Hinzufügen von Namespace X/End Namespace gelöst

2
Lightning3

Ich stellte mich dem Problem und bemerkte, dass Designer.cs-Dateien von meinem Projekt ausgeschlossen wurden.
Versuchen Sie erneut zu suchen, ob sie in Ihrem Projekt enthalten sind.
Viel Glück

2
Dr TJ

Es ist lange her. Buuuut Ich stand heute vor demselben Problem, daher scheint es nie zu spät zu sein. Für mich geschah es, weil die TextBox sich in einem nicht namenlosen Formular befand. Dann habe ich eine ID für das Formular festgelegt und ich könnte die TextBox wie folgt aufrufen: idForm.idTextBox.ToString(). Ich denke, es wird dasselbe mit einer button passieren. 

1
Reginaldo Rigo

Stellen Sie sicher, dass Sie keine Dateien haben, die versehentlich versuchen, dieselbe (Teil-) Klasse zu erben oder zu definieren. Diese Dateien können völlig unabhängig davon sein, wo der Fehler tatsächlich aufgetreten ist!

1
Protector one

Ich bin ein paar Mal auf dieses Thema gestoßen. Manchmal stimmen die Klassennamen im Designer und der Code dahinter nicht überein. In anderen Fällen stimmt der Namespace nicht überein. In anderen Fällen erhält die Designerseite die erzeugte Membervariable nicht. 

Wie bereits erwähnt, kann das Problem durch das erneute Generieren der Designer-Datei behoben werden. Stellen Sie einfach sicher, dass Sie die Aspx-Seite zuerst speichern.

1
Darthg8r

Das Problem ist möglicherweise, dass mehrere aspx-Dateien mit codefile in der Seitenanweisung auf dieselbe codebehind-Datei ..__ verweisen, und erwartet, dass in allen aspx-Dateien dasselbe Steuerelement vorhanden ist, die mit demselben Code hinterlegt sind, wodurch ein Kompilierungsfehler ausgelöst wird.

1
Sandip.Nascar

Ändern Sie einfach die Vererbungseigenschaft unter dem Seiten-Tag

    <% Page inherit = "Project_Name.otherform" 

Ändern Sie es in 

    <% Page inherit = "Project_Name.YourForm"

In form2.aspx.desginer.cs wird der Klassenname ebenfalls geändert und korrigiert.

Lassen Sie mich erklären: Nehmen wir an, Sie haben 2 Webformulare test1.aspx und test2.aspx. Sie haben Code von test1.aspx in test2.aspx kopiert. Ihre test2.aspx-Datei verwendet <% page tag als:

    <% Page inherit = "Project_Name.test1"

was sollte sein als:

    <% Page inherit = "Project_Name.test2"

aus diesem Grund wird der Name Ihrer test2.aspx.designer.cs-Klasse automatisch in test1.aspx.designer.cs geändert, da es sich um eine vom System generierte Datei handelt und Sie Ihre Steuerelement-IDs nicht verwenden können.

Speichern und öffnen Sie test2.aspx.designer.cs, um die Eigenschaft zu überprüfen, und Sie werden feststellen, dass auch der Klassenname geändert wird.

    public partial class test1
    {
     ...

Geändert in

    public partial class test2
    {
    ... 

Danke mir später;) 

0
Mohammad Abraq

Überprüfen Sie den Namespace in allen drei Dateien . Manchmal besteht eine Diskrepanz zwischen dem Namespace-Namen in der Datei designer.cs und den beiden anderen Dateien. Stellen Sie sicher, dass der Namensraumname in allen drei Dateien übereinstimmt

0
netfed