1

ボタンがクリックされたときに、新しいセルと TextBox を追加したいと考えています。しかし、現在の行のボタンをクリックすると、そのセルと TextBox が削除され、新しいものが追加されます。

マークアップ:

<form id="form1" runat="server">
<div>
    <asp:Panel ID="pnlForTextBoxes" runat="server">
    </asp:Panel>
    <asp:DropDownList ID="ddlNumbers" runat="server" Height="16px" Width="143px">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
        <asp:ListItem>3</asp:ListItem>
        <asp:ListItem>4</asp:ListItem>
        <asp:ListItem>5</asp:ListItem>
    </asp:DropDownList>`enter code here`
    <asp:Table ID="myActualTable" runat="server">
    </asp:Table>
    <br />
    <asp:Button ID="cmdAddTextBox" runat="server" Text="Add" OnClick="cmdAddTextBox_Click" />
</div>
</form>

コード:

protected void cmdAddTextBox_Click(object sender, EventArgs e)
{
    TableRow myRow = new TableRow();
    myRow.ID = "row" + ddlNumbers.SelectedValue.ToString();
    TableCell myCell = new TableCell();
    myCell.ID = "cell" + ddlNumbers.SelectedValue.ToString();
    TextBox myTextBox = new TextBox();
    myTextBox.ID = "txt" + ddlNumbers.SelectedValue.ToString();
    myTextBox.Text = "TextBox number " + ddlNumbers.SelectedValue.ToString();
    myCell.Controls.Add(myTextBox);
    myRow.Cells.Add(myCell);
    myActualTable.Rows.Add(myRow);

    myTextBox.Dispose();
    myCell.Dispose();
    myRow.Dispose();
}
4

1 に答える 1

2

これは、古いテキスト ボックスとセルがマークアップに表示されないために発生します。ご存じのように、すべてのポストバック ページ オブジェクトが作成され、ページの最後の変更についてはわかりません。回避策があります。ページ読み込みイベントでは、これがすでにポストバックされているかどうかを確認する必要があります。次に、ビューステートを確認するか、以前のテキストボックスとセルが含まれている隠しフィールドカウンターを確認して、それらを再度作成します。前回指定した名前と ID をより適切に指定して、viewstate の値を復元できるようにします。その後、以前のものを失うことなく、新しい onem を作成できます。

于 2012-05-12T07:21:52.187 に答える