我是菜鸟,我一直试图弄清楚如何使用c#在ASP.NET中创建时为asp:TextBox
标记分配ID。
示例:
我需要创建一个可能有多个文本框的线程。
当用户点击某个按钮时,必须生成一个文本框,其中ID
说txt01
。在第二次点击时,生成的文本框的ID
必须为txt02
,依此类推。取决于点击次数。
先谢谢。
答案 0 :(得分:0)
记住某个变量中的最后一个ID,例如int lastID
,然后在按钮的onClick方法中创建新的TextBox时分配其ID="txt"+lastID;
。
您必须在页面回发期间保留lastID,您可以将其存储在ViewState
。
答案 1 :(得分:0)
在您的aspx页面中选择placeholder
:例如:<asp:PlaceHolder runat="server" ID="pholder" />
并在代码背后:
TextBox txtMyText = new TextBox();
tb1.ID = YourDynamicId;
pholder.Controls.Add(txtMyText);
您可以在ViewState中保存当前ID并获取相同的ID,并将增加的ID分配给动态文本框。
答案 2 :(得分:0)
试试这个:
int i = 1;
if (ViewState["i"] == null)
{
ViewState["i"] = i;
}
else
i = (int)ViewState["i"];
PlaceHolder1.Controls.Clear();
for (int j = 1; j <= i; j++)
{
TextBox TextBox = new TextBox();
TextBox.ID = "TextBox" + j.ToString();
PlaceHolder1.Controls.Add(TextBox);
}
ViewState["i"] = i + 1;
在.aspx页面上添加此内容
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
希望这有帮助。
答案 3 :(得分:0)
将ID存储在ViewState
这样的内容中
首先初始化一个与此类似的计数变量。
在你的class
中写下这个
protected int replyCount //declare the variable
{
get { return (int)ViewState["replyCount"]; }
set { ViewState["replyCount"] = value; }
}
在你的页面中加载写入以初始化replyCount,如果它不是回发;
protected void Page_Load(object sender, EventArgs e)
{
if(!page.IsPostBack)
{
replyCount = 0; //initialise the variable
}
}
然后创建动态文本框
protected void Button_Click(Object sender, EventArgs e)
{
TextBox tb = new TextBox();
tb.id = "tb" + replycount; //use the variable
replycount++; // and after using increment it.
form.controls.add(tb); // assuming your form name is "form"
}
你应该这样做。
答案 4 :(得分:0)
我认为这就是你要找的 -
您会注意到我使用了Page_Init
,因为如果您在Page_Load
中创建/添加控件,那么FindControl
将在PostBack
中返回null。此外,您在动态添加的控件中输入的任何数据都不会在回发期间保留。
但在加载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);
}
}