문제

I have a nested repeater and I use a textbox in footer template. I wanto to get textbox.text value in button click. Here is my repeater:

    <asp:Repeater ID="rprSSFirst" runat="server" OnItemDataBound="rprSSFirst_ItemDataBound"  >

<HeaderTemplate>
    </HeaderTemplate>
            <ItemTemplate>
                //******Some Items******
               <asp:Repeater ID="rprSSNested" runat="server" >  //Nested Repeater
                    <HeaderTemplate>
                    </HeaderTemplate>
                      <ItemTemplate>
                           //******Some Items******
                      </ItemTemplate>
                    <FooterTemplate>   
                      <div style=" padding: 20px 35px;" id='ajax'>
                         <asp:TextBox ID="textbox" TextMode="MultiLine" Columns="50" Rows="10" runat="server"></asp:TextBox>
                         <br />
                         <asp:Button ID="Button2" runat="server" OnClick="btn_Save_Click" Text="Save" />                             
                      </div>  
                  </FooterTemplate>
                </asp:Repeater>
              </ItemTemplate>
            <FooterTemplate>

            </FooterTemplate>
        </asp:Repeater>

//In Code Behind

protected void btn_Save_Click(object sender, EventArgs e)
{
 TextBox txtAns = (TextBox)rprSSFirst.Controls[rprSSFirst.Controls.Count - 1].FindControl("textbox");
}

But txtAns Value is always null. How to get footer item textbox value in button click? or any other way?

Thanks for your answers.

도움이 되었습니까?

해결책

You have to find the nested RepeaterItem first where both controls are sitting. You can get it by casting the NamingContainer:

protected void btn_Save_Click(object sender, EventArgs e)
{
    Button btnSave = (Button) sender;
    RepeaterItem item = (RepeaterItem) btnSave.NamingContainer;
    TextBox txtAns = (TextBox) item.FindControl("textbox");
}

다른 팁

You can use Commandname property like this for button of nested repeater:

 <asp:Repeater ID="rprSSNested" runat="server" OnItemCommand="rprSSNested_ItemCommand" >  
                <HeaderTemplate>
                </HeaderTemplate>
                  <ItemTemplate>  
                       //******Some Items******
                  </ItemTemplate>
                <FooterTemplate>   
                  <div style=" padding: 20px 35px;" id='ajax'>
                     <asp:TextBox ID="textbox" TextMode="MultiLine" Columns="50" Rows="10" runat="server" ></asp:TextBox>
                     <br />
                     <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Save" CommandName="cmd" CommandArgument="arg"/>                             
                  </div>  
              </FooterTemplate>
            </asp:Repeater> 

And add event in c# code like this:

protected void rprSSNested_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Footer)
    {
        if (e.CommandName == "cmd")
        {
            string ss = ((TextBox)e.Item.FindControl("textbox")).Text;
            Response.Write(ss);
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top