Product.aspx
<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";
}
Product.aspx的第1行
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Product.aspx.cs" Inherits="Product" %>
以上只是我的代码的一小部分。我添加到Product.aspx页面的任何控件都不能在.cs文件中使用。将会出现错误提示&#34;名称&#39;控制名称&#39;在当前上下文中不存在&#34;。字面上尝试了我可以在网上找到的所有解决方案,但无济于事。
请注意,我使用的是ASP.Net空网站,而不是Web应用程序,因此没有designer.cs文件。
答案 0 :(得分:2)
您无法直接访问quantitytb
,因为它位于DataList
范围内。与任何数据绑定容器(gridview
,repeater
,formview
等)类似,您必须定位特定项/行以查找其子控件。如果您的数据列表中包含10个项目,则表示您将有10次quantitytb
次出现 - 如果您未指定要定位的是哪一项,则代码将引发错误。
如果您正在尝试修改单击按钮的兄弟文本框,那么您可能正在寻找的是:
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";
}