自动创建控件 C# Visual Studio



我正在制作一个用于用户输入的表单,每次用户单击按钮时,都会添加一个新文本框供他们输入。

我能够毫无问题地创建文本框,但是在命名它们时遇到了问题。 它们都需要有不同的名称(否则它们会相互覆盖(,所以我想做这样的事情:

string strName = "txt"+counter.toString(); 
HtmlGenericControl gc = new HtmlGenericControl("li");
InputList.Controls.Add(gc);
TextBox strName = new TextBox();
strName.Text = "hello world"+counter.toString();
gc.addControls.Add(strName);

Vs 不喜欢这样,但我需要能够提供许多自动生成的文本框。 关于如何解决此问题的任何建议,或者您可以推荐另一种方法吗?

为什么需要string strName = "txt"+counter.toString();

您可以尝试像这样更改ID属性,而不是更改TextBoxes 的Text属性:

HtmlGenericControl gc = new HtmlGenericControl("li");
gc.ID = "li"+counter.toString(); //This is needed to take it later
InputList.Controls.Add(gc);
TextBox strName = new TextBox();
strName.Text = "txtbox"+counter.toString();
gc.addControls.Add(strName);

然后,如果要从这些TextBoxes中获取值,则应使用:

TextBox txtbox = (TextBox)(InputList.FindControl("li1").FindControl("txtbox1"));  
var inputText = txtbox.Text; //This contains the text inside the `TextBox`

编辑

正如 Vilx- 提到的,每次单击添加按钮时都会发生新的回发,因此,您必须找到一种方法来加载回发时已创建的TextBox。 最好的方法是完全在前端使用 JavaScript/JQuery 动态创建input字段,并在表单提交时将它们发送回服务器。

下面是一个示例:如何使用 javascript 在 asp.net Web 表单上动态添加文本框:

ASP.NET WebForms 在动态生成的控件方面是一个 PITA。我建议找到一个好的可编辑的类似 GridView 的控件并使用它。让别人处理这个烂摊子。

其他请记住,您需要为它们提供不同的ID,并在每个Page_Init中准确地在离开它们的位置重新创建它们。相同的 ID,控件树中的相同位置。当你完成这个操作时,你会注意到"添加"按钮的性能很糟糕,因为每次你按下它时它都会回发。理想情况下,您应该在客户端(也称为Javascript(添加其他文本框,而无需接触服务器。如果你这样做,那么你要么需要完全放弃整个控制范式,而是直接使用Request.Form(至少对于这几个文本框(,要么你需要以某种方式在你的Page_Init中找出添加多少个文本框在哪里,以便它们与客户端创建的内容相匹配。

所以......祝你好运!

变量名称仅在编译时可用。不能在运行时创建变量名称。相反,您应该使用数组或列表。

最新更新