Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在中继器中找不到我的文本框_C#_Asp.net_Textbox_Repeater_Findcontrol - Fatal编程技术网

C# 在中继器中找不到我的文本框

C# 在中继器中找不到我的文本框,c#,asp.net,textbox,repeater,findcontrol,C#,Asp.net,Textbox,Repeater,Findcontrol,我正在为一家咖啡馆做菜单。它显示了食物和溜冰场的项目,价格,然后我想要一个文本框,人们可以在文本框中写下他们想买多少。然后,我希望每个文本框都有一个基于菜单项ID的唯一ID 这是我的中继器: <asp:Repeater ID="ParentRepeater" runat="server" OnItemDataBound="ParentRepeater_ItemDataBound"> <ItemTemplate> <h2>

我正在为一家咖啡馆做菜单。它显示了食物和溜冰场的项目,价格,然后我想要一个文本框,人们可以在文本框中写下他们想买多少。然后,我希望每个文本框都有一个基于菜单项ID的唯一ID

这是我的中继器:

<asp:Repeater ID="ParentRepeater" runat="server" OnItemDataBound="ParentRepeater_ItemDataBound">
        <ItemTemplate>
            <h2>
                <%#DataBinder.Eval(Container.DataItem, "typenavn") %></h2>
            <asp:HiddenField ID="HiddenField1" Value='<%# Eval("id") %>' runat="server" />
            <asp:Repeater ID="ChildRepeater" runat="server">
                <ItemTemplate>
                    <table>
                        <tr>
                            <td style="width: 400px">
                                <%#DataBinder.Eval(Container.DataItem, "productName") %>
                            </td>
                            <td style="width: 400px">
                                <%#DataBinder.Eval(Container.DataItem, "pris") %>
                            </td>
                            <td>
                                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
这是我的代码:

protected void ParentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;

        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater ChildRepeater = (Repeater)item.FindControl("ChildRepeater");

            HiddenField hide = e.Item.FindControl("HiddenField1") as HiddenField;
            int id = Convert.ToInt32(hide.Value);

            var query = from es in gr.products
                        where es.typeID == id
                        select es;

            List<product> list = new List<product>();
            foreach (product pro in query)
            {
                list.Add(pro);
            }

            ChildRepeater.DataSource = list;
            ChildRepeater.DataBind();

            int h = 0;

            foreach (RepeaterItem item1 in ChildRepeater.Items)
            {
                if (item1.ItemType == ListItemType.Item || item1.ItemType == ListItemType.AlternatingItem)
                {
                    TextBox txt = (TextBox)item1.FindControl("TextBox1") as TextBox;
                    HiddenField hf = (HiddenField)item1.FindControl("HiddenField2") as HiddenField;

                    for (int i = 0; i < list.Count; i++)
                    {
                        txt.ID = "HB" + list[h].id.ToString();
                        hf.Value = list[h].id.ToString();
                        h++;
                        break;
                    }
                }
            }
        }
    }

有人知道如何找到文本框吗???

你必须在搜索框中搜索文本框。因此,您要么处理内部Repeater的ItemDataBound事件,要么简单地迭代所有RepeaterItems:

foreach(RepeaterItem item in ChildRepeater.Items){
  if(item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem){
    var txt = (TextBox)item.FindControl("TextBox1");
  }
}

使用此链接希望有所帮助。我尝试过:ContentPlaceHolder MainContent=Page.Master.FindControlMainContent作为ContentPlaceHolder;Repeater Parent=MainContent.FindControlParentRepeater作为中继器;Repeater Child=Parent.FindControlChildRepeater作为中继器;但它只给了我父母的复读,而不是孩子的复读,正如我已经说过的。文本框的NamingContainer是子中继器的RepeaterItem。因此,如果不使用递归函数,就不可能通过外部中继器使用FindControl。顺便说一句,你应该看到我编辑的版本,它不包含一个桌面窗格,并向你展示了如何找到文本框1,你尝试了什么,在哪里编辑你的问题?您的ChildRepeater有项目吗?你调试过了吗?我想我现在可以工作了:非常感谢你的帮助。我进行了一次调试,发现我忘记将所有的“item”更改为“item1”