C# 标签返回数据列表中的空值

C# 标签返回数据列表中的空值,c#,asp.net,C#,Asp.net,我有一个带有标签、文本框和按钮的数据列表。点击一个按钮,我想要一个textbox和label的值,我得到了textbox的值,但label是空的。如何解决这个问题。Thanyou protected void btnAdd_Click(object sender, EventArgs e) { foreach (DataListItem item in rptrItems.Items) { string quantity = ((TextBox)item.Find

我有一个带有标签、文本框和按钮的数据列表。点击一个按钮,我想要一个textbox和label的值,我得到了textbox的值,但label是空的。如何解决这个问题。Thanyou

protected void btnAdd_Click(object sender, EventArgs e)
{
    foreach (DataListItem item in rptrItems.Items)
    {
        string quantity = ((TextBox)item.FindControl("txtQuantity")).Text;
        string itemName =((Label)item.FindControl("itemName")).Text;
    }
}



 <asp:DataList ID="rptrItems" runat="server" RepeatColumns="3" >

                       <ItemTemplate> 
                         <div class="panel panel-info">
                           <div class="panel-heading"> Item= <asp:Label ID="itemName" runat="server"> <strong>"<%#Eval("ItemName")%>"</strong></asp:Label></div>
                           <div class="panel-body">
                              <div class="row">
                                <label class="lblQuantity"> Quantity:  </label>
                                <asp:TextBox ID="txtQuantity" runat="server" CssClass="form-control"></asp:TextBox>  
                               </div>
                              <div class="row">
                                <asp:Button ID="btnAdd" runat="server" CssClass="btn-Add" OnClick="btnAdd_Click" /> </div>                                  
                            </div>
                          </div>
                       </ItemTemplate>

                        </asp:DataList>
protectedvoidbtnadd\u单击(对象发送者,事件参数e)
{
foreach(rptrItems.Items中的DataListItem项)
{
字符串数量=((文本框)item.FindControl(“txtQuantity”).Text;
字符串itemName=((Label)item.FindControl(“itemName”).Text;
}
}
项目=
数量:

仅表单元素将其值发布到服务器,因此标签不会发布其值。这就是您无法获取其文本值的原因。请尝试隐藏输入元素

在这里查看HiddenField元素:

<asp:DataList ID="rptrItems" runat="server" RepeatColumns="3" >
    <ItemTemplate> 
     <div class="panel panel-info">
       <div class="panel-heading"> 
            Item= <asp:Label ID="itemName" runat="server"> <strong>"<%#Eval("ItemName")%>"</strong></asp:Label>
            <asp:HiddenField ID="itemName" runat="server" Value='<%# Eval("ItemName") %>' />
       </div>
       <div class="panel-body">
          <div class="row">
            <label class="lblQuantity"> Quantity:  </label>
            <asp:TextBox ID="txtQuantity" runat="server" CssClass="form-control"></asp:TextBox>  
           </div>
          <div class="row">
            <asp:Button ID="btnAdd" runat="server" CssClass="btn-Add" OnClick="btnAdd_Click" /> </div>                                  
        </div>
      </div>
    </ItemTemplate>
</asp:DataList>

每个Canavar注释使用隐藏字段

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rptrItems.DataSource = new List<Item>
            {
                new Item {ItemName = "Item Name",Quantity=1}
            };
            rptrItems.DataBind();
        }
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        foreach (DataListItem item in rptrItems.Items)
        {
            string quantity = ((TextBox)item.FindControl("txtQuantity")).Text;
            string itemName = ((HiddenField)item.FindControl("itemName")).Value;
        }
    }

    public class Item
    {
        public string ItemName { get; set; }

        public int Quantity { get; set; }
    }

 <asp:DataList runat="server" ID="rptrItems">
<ItemTemplate>
    <asp:HiddenField ID="itemName" runat="server" Value='<%# Eval("ItemName") %>' />
    <asp:Label ID="labItemName" runat="server" Text='<%# Eval("ItemName") %>' /> : 
    <asp:TextBox ID="txtQuantity" runat="server" Text='<%# Eval("Quantity") %>'></asp:TextBox>
</ItemTemplate>
</asp:DataList>
<asp:Button ID="btnSubmit" OnClick="btnAdd_Click" runat="server" Text="Submit" />
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
rptrItems.DataSource=新列表
{
新项目{ItemName=“ItemName”,数量=1}
};
rptrItems.DataBind();
}
}
受保护的无效btnAdd_单击(对象发送者,事件参数e)
{
foreach(rptrItems.Items中的DataListItem项)
{
字符串数量=((文本框)item.FindControl(“txtQuantity”).Text;
字符串itemName=((HiddenField)item.FindControl(“itemName”)).Value;
}
}
公共类项目
{
公共字符串ItemName{get;set;}
公共整数数量{get;set;}
}
: 

您能发布完整的代码吗?第一个问题-您是否在调试器中逐步完成了代码?这是解决这类问题的最快方法。除此之外,
itemName
是否是您要查找的
标签的正确名称?
标签
的子项吗
FindControl
找不到嵌套控件。最后,您确定
标签
上的
文本
属性有值吗?@Tim。是的,我使用调试器遍历label的值,但它显示为空。itemName是标签的id。标签在数据列表中。那么
文本框
字段呢???@Canavar。请你举一个我对.net不熟悉的例子好吗。Thankyou@ajmot我不需要文本框,我需要一个标签来显示itemName。@Farrukh您能更新您的问题并添加数据列表标记代码吗?我将给你一个关于这个代码的例子。顺便说一句,你不需要改变标签。非常感谢你的努力:)@Farrukh你可以投票决定答案,这样可能会帮助其他人。
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rptrItems.DataSource = new List<Item>
            {
                new Item {ItemName = "Item Name",Quantity=1}
            };
            rptrItems.DataBind();
        }
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        foreach (DataListItem item in rptrItems.Items)
        {
            string quantity = ((TextBox)item.FindControl("txtQuantity")).Text;
            string itemName = ((HiddenField)item.FindControl("itemName")).Value;
        }
    }

    public class Item
    {
        public string ItemName { get; set; }

        public int Quantity { get; set; }
    }

 <asp:DataList runat="server" ID="rptrItems">
<ItemTemplate>
    <asp:HiddenField ID="itemName" runat="server" Value='<%# Eval("ItemName") %>' />
    <asp:Label ID="labItemName" runat="server" Text='<%# Eval("ItemName") %>' /> : 
    <asp:TextBox ID="txtQuantity" runat="server" Text='<%# Eval("Quantity") %>'></asp:TextBox>
</ItemTemplate>
</asp:DataList>
<asp:Button ID="btnSubmit" OnClick="btnAdd_Click" runat="server" Text="Submit" />