7

私はこのコードを使用しています

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<asp:Button ID="addnewtext" runat="server" Text="Add" onclick="addnewtext_Click" width="76px" />

およびaspx.csページコード:

TextBox tb;
static int i = 0;
protected void addnewtext_Click(object sender, EventArgs e)
{
    tb = new TextBox();
    tb.ID = i.ToString();

    PlaceHolder1.Controls.Add(tb);
    i++;
}

ボタンをクリックするたびに、別のテキストボックスを追加します。

4

2 に答える 2

6

理由: サーバーサイドにポストバックするよりもボタンをもう一度クリックすると、以前に追加された動的なテキストボックスが削除されます

解決策: もう一度追加するには、次のようにする必要があります

 TextBox tb;
static int i = 0;
protected void addnewtext_Click(object sender, EventArgs e)
{
        i++;
    for(j=0;j<=i;j++)
    {
    tb = new TextBox();
    tb.ID = j.ToString();

    PlaceHolder1.Controls.Add(tb);
    }

}

つまり、追加したテキストボックスを再度作成する必要があります...ページに動的にコントロールを追加しているためです...

このような記事が役立つかもしれません:ASP.NETアプリケーションで動的に作成されたコントロールの状態を保持する

于 2012-11-21T07:07:55.673 に答える
1

リストビューで行きましょう

<asp:ListView ID="lvDynamicTextboxes" runat="server" 
  ItemPlaceholderID="itemPlaceholder">   <LayoutTemplate>     <table>       <asp:PlaceHolder ID="itemPlaceholder" 
        runat="server"></asp:PlaceHolder>     </table>   </LayoutTemplate>   <ItemTemplate>     <tr>       <asp:TextBox ID="txtText" runat="server">       </asp:TextBox>     </tr>   </ItemTemplate>      
</asp:ListView>

<asp:Button ID="btnAddTextBox" runat="server" 
  Text="Add" onclick="btnAddTextBox_Click" />

そしていくつかのコード

private void BindListView()
{
    //get the current textbox count     int count = 1;
    if (ViewState["textboxCount"] != null)
        count = (int)ViewState["textboxCount"];

    //create an enumerable range based on the current count     IEnumerable<int> enumerable = Enumerable.Range(1, count);

    //bind the listview     this.lvDynamicTextboxes.DataSource = enumerable;
    this.lvDynamicTextboxes.DataBind();
}

private void IncrementTextboxCount()
{
    int count = 1;
    if (ViewState["textboxCount"] != null)
        count = (int)ViewState["textboxCount"];

    count++;
    ViewState["textboxCount"] = count;
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
   {
        this.BindListView();  
    }
}

protected void btnAddTextBox_Click(object sender, EventArgs e)
{
    this.IncrementTextboxCount();
    this.BindListView();
}

これらの追加されたテキストボックスから値を抽出するには:

private IList<string> GetValues()
{
    List<string> values = new List<string>();
    TextBox txt = null;
    foreach (ListViewItem item in this.lvDynamicTextboxes.Items)
    {
        if (item is ListViewDataItem)
       {
            txt = (TextBox)item.FindControl("txtText");
            values.Add(txt.Text);
        }
    }
    return values;
}
于 2012-11-21T07:25:26.803 に答える