私は初心者で、asp:TextBox
c# を使用して ASP.NET での作成時にタグに ID を割り当てる方法を理解しようとしています。
例:
複数のテキストボックスを持つスレッドを作成する必要があります。
ユーザーがボタンをクリックすると、テキスト ボックスが生成されID
、txt01
. 2 回目にクリックするID
と、生成されたテキスト ボックスtxt02
の値は、クリック数に応じて次のようになります。
前もって感謝します。
あなたplaceholder
のaspxページでとってください:例:<asp:PlaceHolder runat="server" ID="pholder" />
およびコードビハインドで:
TextBox txtMyText = new TextBox();
tb1.ID = YourDynamicId;
pholder.Controls.Add(txtMyText);
現在の ID を ViewState に保存して、同じ ID を取得し、インクリメントされた ID を動的テキスト ボックスに割り当てることができます。
これがあなたが探しているものだと思います-
Page_Init
でコントロールを作成/追加すると、 で null が返されるため、Page_Load
私FindControl
が使用したことに気付くでしょうPostBack
。また、動的に追加されたコントロールに入力したデータは、ポストバック中に保持されません。
ただし、データがロードさPage_Init
れる前に呼び出されます。したがって、またはその他のコントロールを使用してコントロール カウントを維持することはできません。だから私はカウントを維持するために使用されています。ViewState
PostBack
ViewState
Session
試してみて、感想を教えてください。
<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);
}
}