代码之家  ›  专栏  ›  技术社区  ›  user1698255

如何从数据列表中获取文本框值?

  •  1
  • user1698255  · 技术社区  · 11 年前

    我正在使用数据列表显示产品id、名称和允许用户输入订单数量的文本框(“数量”)。我得到了System.NullReferenceException:当用户单击要订购的项时,对象引用没有设置为对象错误的实例。我的数据源只提供了2列(产品id和名称)。我在数据列表中添加了一个文本框(“数量”)和一个按钮。我无法从要提交的文本框(“数量”)中获取值。可能是我的数据源不包含“数量”列,所以FindControl总是返回null值吗?我该如何解决这个问题?谢谢这是我的代码:

    <asp:DataList ID="DataList1" runat="server" CellPadding="10" DataKeyField="product_id" DataSourceID="SqlDataSource1" RepeatColumns="2">
     <ItemTemplate>
      <asp:Label ID="product_id" runat="server" 
         Text='<%# Eval("product_id") %>' /><br/>
      <asp:Label ID="product_name" runat="server" 
         Text='<%# Eval("product_name") %>' />
     <br />
    
    <asp:TextBox ID="Qty" runat="server"></asp:TextBox>
    <asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2"   OnCommand="DataList1_ItemCommand"
        />  
    </ItemTemplate>
    </asp:DataList>
    

    这是按钮的代码:

    public void DataList1_ItemCommand(object source, System.Web.UI.WebControls.CommandEventArgs e)
    
    {
     var qtytxtbox =  DataList1.FindControl("Qty") as TextBox;
     // qtytxtbox always return null, why?
    
    }
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   Sachin    11 年前

    你的处理程序看起来不正确。你应该使用 DataListCommandEventArgs 作为第二参数。所以试试这样的

    标记:

    <asp:DataList ID="DataList1" runat="server" OnItemCommand="DataList1_ItemCommand" vCellPadding="10" DataKeyField="product_id" DataSourceID="SqlDataSource1" RepeatColumns="2">
    

    然后在按钮中添加命令名

    <asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2" />  
    

    和后面的代码

    public void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
      if(e.CommandName.Equals("addtocart2")
      {
        TextBox qtytxtbox = (TextBox)(e.Item.FindControl("Qty"));
      }
    }