0

私は初心者で、asp:TextBoxc# を使用して ASP.NET での作成時にタグに ID を割り当てる方法を理解しようとしています。

例:

複数のテキストボックスを持つスレッドを作成する必要があります。

ユーザーがボタンをクリックすると、テキスト ボックスが生成されIDtxt01. 2 回目にクリックするIDと、生成されたテキスト ボックスtxt02の値は、クリック数に応じて次のようになります。

前もって感謝します。

4

5 に答える 5

0

あなたplaceholderのaspxページでとってください:例:<asp:PlaceHolder runat="server" ID="pholder" />

およびコードビハインドで:

TextBox txtMyText = new TextBox();
tb1.ID = YourDynamicId;
pholder.Controls.Add(txtMyText);

現在の ID を ViewState に保存して、同じ ID を取得し、インクリメントされた ID を動的テキスト ボックスに割り当てることができます。

于 2013-04-01T07:39:22.033 に答える
0

これがあなたが探しているものだと思います-

Page_Initでコントロールを作成/追加すると、 で null が返されるため、Page_LoadFindControlが使用したことに気付くでしょうPostBack。また、動的に追加されたコントロールに入力したデータは、ポストバック中に保持されません。

ただし、データがロードさPage_Initれる前に呼び出されます。したがって、またはその他のコントロールを使用してコントロール カウントを維持することはできません。だから私はカウントを維持するために使用されています。ViewStatePostBackViewStateSession

試してみて、感想を教えてください。

ASPXページ

<form id="form1" runat="server">
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    <asp:Button ID="btnCreate" runat="server" Text="Create" OnClick="btnCreate_Click" />
    <asp:Button ID="btnRead" runat="server" Text="Read" OnClick="btnRead_Click" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>

コードビハインド

protected int NumberOfControls
{
    get { return Convert.ToInt32(Session["noCon"]); }
    set { Session["noCon"] = value.ToString(); }
}

private void Page_Init(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
        //Initiate the counter of dynamically added controls
        this.NumberOfControls = 0;
    else
        //Controls must be repeatedly be created on postback
        this.createControls();
}
private void Page_Load(object sender, System.EventArgs e)
{

}

protected void btnCreate_Click(object sender, EventArgs e)
{
    TextBox tbx = new TextBox();
    tbx.ID = "txtData"+NumberOfControls;
    NumberOfControls++;

    PlaceHolder1.Controls.Add(tbx);
}
protected void btnRead_Click(object sender, EventArgs e)
{
    int count = this.NumberOfControls;

    for (int i = 0; i < count; i++)
    {
        TextBox tx = (TextBox)PlaceHolder1.FindControl("txtData" + i.ToString());
        //Add the Controls to the container of your choice
        Label1.Text += tx.Text + ",";
    }
}

private void createControls()
{
    int count = this.NumberOfControls;

    for (int i = 0; i < count; i++)
    {
        TextBox tx = new TextBox();
        tx.ID = "txtData" + i.ToString();
        //Add the Controls to the container of your choice
        PlaceHolder1.Controls.Add(tx);
    }
}
于 2013-04-01T09:38:22.913 に答える