【问题标题】:Can not get textbox value inside datalist无法在数据列表中获取文本框值
【发布时间】:2013-03-07 04:05:44
【问题描述】:

我试图在数据列表中获取文本框“数量”的值。这是行不通的。怎么了?我在 ajax 更新面板中有 CartItem 标签和日期列表。谢谢你的帮助。这是我的代码:

<asp:Label ID="CartItems" runat="server" Text="CartItem"></asp:Label>
<br />
<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 />
  Qty
  <br/>

    <asp:TextBox ID="Qty" runat="server"></asp:TextBox>
    <asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" 
         onClick="ButtonAddToCart_Click"/>                    

    <br />
  </ItemTemplate>
</asp:DataList>

这里是按钮点击事件。 CartItem 的值为空:

 protected void ButtonAddToCart_Click(object sender, EventArgs e)

    {
        CartItem.Text = DataList1.FindControl("Qty").ToString();
    } 

【问题讨论】:

    标签: asp.net ajax datalist


    【解决方案1】:
        TextBox Qty = (TextBox)DataList1.FindControl("Qty");
    if(Qty != null)
    {
        CartItem.Text =Qty.Text;
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用NamingContainerParent 访问兄弟控件

      protected void ButtonAddToCart_Click(object sender, EventArgs e)
      {
          var button = sender as Button;
          var textbox = button.NamingContainer.FindControl("Qty") as TextBox;
          CartItem.Text = textbox.Text;
      }
      

      【讨论】:

        【解决方案3】:

        我更喜欢你使用 datalist 的 item_command 事件 做一些这样的想法。

          <asp:Label ID="CartItems" runat="server" Text="CartItem"></asp:Label>
          <br />
        <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 />
         Qty
        <br/>
        
        <asp:TextBox ID="Qty" runat="server"></asp:TextBox>
        <asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2"   OnCommand="DataList1_ItemCommand"
            />                    
        
        <br />
        </ItemTemplate>
        </asp:DataList>
        


        这是有效的 item_command 事件。

         public void DataList1_ItemCommand(object source, System.Web.UI.WebControls.CommandEventArgs e){
         TextBox qtytxtbox =  DataList1.FindControl("Qty") as TextBox;
        }
        

        【讨论】:

          【解决方案4】:

          你可以这样做

          protected void ButtonAddToCart_Click(object sender, EventArgs e)
          {
          
              Button ButtonAddToCart= (Button)sender;
              DataListItem item = (DataListItem)ButtonAddToCart.NamingContainer;
              var textbox = (TextBox)item.FindControl("Qty");
          }          
          

          【讨论】:

            【解决方案5】:

            试试这个

            TextBox txtquantity = (TextBox)(e.Item.FindControl("Qty"));
            

            只需使用这个......你会得到txtquantity中的值

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-22
              • 1970-01-01
              • 2015-07-09
              • 1970-01-01
              • 2017-12-07
              相关资源
              最近更新 更多