2017-01-05 12 views
1

Product.aspxASP.NET Web Site "Der Name existiert nicht im aktuellen Kontext"

<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1"> 
    <ItemTemplate> 
     <asp:textbox runat="server" ID="quantitytb"></asp:textbox> 
     <asp:Button CssClass="addtocart-button" runat="server" Text="Add to cart" ID="addtocartbutton" onclick="addtocartbutton_Click"></asp:Button> 

    </ItemTemplate> 
</asp:DataList> 

Product.aspx.cs

protected void addtocartbutton_Click(object sender, EventArgs e) 
{ 
    quantitytb.Text="1"; 
} 

Linie 1 von Product.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Product.aspx.cs" Inherits="Product" %> 

Oben ist nur ein kleiner Ausschnitt davon, wie mein Code aussieht. Alle Steuerelemente, die ich meiner Product.aspx-Seite hinzufüge, funktionieren nicht in der CS-Datei. Es wird ein Fehler angezeigt, der besagt, dass der Name 'Steuerelementname' im aktuellen Kontext nicht vorhanden ist. Wörtlich versucht alle Lösungen, die ich online finden kann, aber ohne Erfolg.

Beachten Sie, dass ich ASP.Net Empty Web Site und nicht Web Application verwenden, so gibt es keine Designer.cs-Datei.

+0

einschließlich des gewünschten Verhalten in Ihrer Frage wäre hier –

Antwort

2

Sie können nicht direkt auf quantitytb zugreifen, da es sich innerhalb einer DataList befindet. Ähnlich wie bei allen datengebundenen Containern (gridview, repeater, formview usw.) müssen Sie auf ein bestimmtes Element/eine bestimmte Zeile abzielen, um die untergeordneten Steuerelemente zu finden. Wenn Ihr Datenlogger 10 Elemente enthält, bedeutet dies, dass Sie 10 Vorkommen von quantitytb haben. Wenn Sie nicht angeben, auf welches Ziel Sie zielen, wird der Code einen Fehler auslösen.

Wenn Sie versuchen, das Textfeld zu ändern, die die Geschwister des angeklickten Taste ist, vielleicht das, was Sie suchen, ist dies:

protected void addtocartbutton_Click(object sender, EventArgs e) 
{ 
    //Find the button that was clicked 
    Button addToCart = (Button)sender; 

    //Get the button's parent item, and within that item, look for a textbox called quantitytb 
    TextBox quantitytb = (TextBox)addToCart.Parent.FindControl("quantitytb"); 

    //Set that textbox's text to "1" 
    quantitytb.Text="1"; 
} 
+0

Dank schön Du hast so viel für die Antwort! Wenn mein Datenlogger jedoch über mehr als einen Artikel verfügt, wie kann der Code dann auf den gewünschten Artikel ausgerichtet werden? – user7381027

+0

Meine aktuelle Antwort sollte das tun. Wir können den "Absender" (die Schaltfläche, auf die geklickt wurde) abrufen und dann dessen Eltern (das Datenelementelement) abrufen. Jetzt, wo wir den spezifischen Gegenstand haben, können wir sagen "In diesem bestimmten Gegenstand, finden Sie' quantitytb' und ändern Sie seinen Text. " Ich habe meinen Code kommentiert, um das deutlicher zu machen. – Santi

+0

Nochmals vielen Dank! Es klappt! Jedoch, wenn ich Steuerelemente anstelle von Textfeldern verwenden sollte, welche Änderungen muss ich an den C# -Code vornehmen? '' – user7381027

Verwandte Themen