arkulin
arkulin

Reputation: 23

How to get Text property of TextBox after ItemCommand event

I have a TextBox control inside a panel and this panel is inside DataList ItemTemplate.

After firing the ItemCommand event, everything works fine except that the TextBox.Text property is always an empty string "" although there is some text in it.

I tried several ways but without success. I would really appreciate if someone can assist me with this. Simplified code is shown below. Thank you!

ASPX page:

<asp:DataList ID="dlDataList" runat="server" onitemcommand="dlDataList_ItemCommand">
       <ItemTemplate>

           <asp:Panel ID="pnlReply" runat="server" Visible="False">
             <asp:TextBox ID="txtTextBox" runat="server"></asp:TextBox><br />
             <asp:LinkButton ID="lnkbtnSend" CommandName="Send" runat="server">Send</asp:LinkButton>
           </asp:Panel><br />
           <asp:LinkButton ID="OpenPanel" CommandName="OpenPanel" runat="server">Open panel</asp:LinkButton>
       </ItemTemplate>
</asp:DataList>

</asp:Content>

ASPX.CS Page code behind

protected void Page_Load(object sender, EventArgs e)
    {

        FillDataList();

    }

    private void FillDataList()
    {
        List<string> list = new List<string>();
        list.Add("First");
        list.Add("Second");
        list.Add("Third");


        dlDataList.DataSource = list;
        dlDataList.DataBind();
    }

    protected void dlDataList_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "OpenPanel")
        {
            Panel pnlReply = (Panel)e.Item.FindControl("pnlReply");
            pnlReply.Visible = true;
        }
        if (e.CommandName == "Send")
        {
            TextBox txtTextBox = (TextBox)e.Item.FindControl("txtTextBox");
            //I tried this way also..
            //TextBox txtTextBox = (TextBox)e.item.FindControl("pnlReady").FindControl("txtTextBox");
            Label1.Text = txtTextBox.Text;

        }
    }

Upvotes: 2

Views: 4052

Answers (1)

Amit
Amit

Reputation: 22076

Please use IsPostBack in page load event. Without it your FillDataList(); is executing on every postback and resetting your DataList.

  protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            FillDataList();

        }
     }

Upvotes: 5

Related Questions