2

パネル内にTextBoxコントロールがあり、このパネルはDataListItemTemplate内にあります。

ItemCommandイベントを発生させた後、TextBox.Textプロパティが常に空の文字列 ""である以外はすべて正常に機能しますが、テキストは含まれています。

私はいくつかの方法を試しましたが、成功しませんでした。誰かがこれを手伝ってくれたら本当にありがたいです。簡略化したコードを以下に示します。ありがとうございました!

ASPXページ:

<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ページコードビハインド

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;

        }
    }
4

1 に答える 1

5

IsPostBackページ読み込みイベントでご利用ください。それがないと、FillDataList();すべてのポストバックで実行され、をリセットされますDataList

  protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            FillDataList();

        }
     }
于 2012-05-19T21:59:50.270 に答える