如何自动添加文本框

我有这8个文本框,但当我开始认为它在我的页面上非常混乱。 所以,我在想如何实现一个按钮,当用户点击它时可以添加文本框。 这里有没有人有想法或解决方案来帮助我? 我很感激。 谢谢。

可能最好的方法是将文本框放在用户控件中。 然后,该用户控件可以封装属于两个文本框的所有逻辑; 它可以计算两个值之间的差异,例如,封装两个等的所有validation等。你只需要写一次这个位!

在页面中添加占位符; 给它一个“DynamicControlHolder”或类似的id。 您还需要一个隐藏字段 – DynamicControlCount – 您可以使用它来存储您添加的动态控件的数量。

两个最重要的概念是:

  • 在合适的时间添加动态控件
  • 尝试并维护回发之间的ID,以便ASP.Net自动为您填充ViewState中的值。 否则,你必须自己管理。

因此,当页面第一次加载时,您可以在Page_Init中执行以下操作,例如:

{ MyUserControl control = Page.LoadControl("~/path_to_my_usercontrol"); control.ID = "MyUserControl1"; DynamicControlCount.Value = "1"; DynamicControlHolder.Controls.Add(control); } 

如果您在页面上有一个按钮,则“添加控件”,然后在单击处理程序中:

 { int controlCount = Convert.ToInt32(DynamicControlCount.Value); controlCount++; //This section will add as many controls as i. for(i = 1; i <= controlCount; i++) { MyUserControl control = Page.LoadControl("~/path_to_my_usercontrol"); control.ID = String.Format("MyUserControl{0}", i); DynamicControlHolder.Controls.Add(control); } DynamicControlCount.Value = Convert.ToString(controlCount); //Note this is problematic } 

控制第二部分的最简单方法是使用UpdatePanel 。 这样做的主要原因是,当您更新控件的数量时,您在页面的生命周期中执行此操作,并且在完整的回发中,该值可能不会以您对回发的预期方式增加。 如果整个页面没有回发只是为了修改它的一小部分,它对用户来说看起来也更好。

这些只是让您入门的一些想法。 这方面的一个很好的参考是:

真正理解动态控制

你应该做一些阅读,因为viewstate,页面生命周期,客户端渲染和其他因素的组合使这成为ASP.Net中最棘手但最有趣的技术之一

如果你考虑使用jquery,事情可能很简单:

 

现在是javascript / jquery部分

 $('#text_box_inserter').click(function(){ $('#text_box_container').append(''); }) 

这将创建一个文本框并将其添加到id="divFirstName"divdiv应该有runat="server"

 TextBox tbFirstName = new TextBox(); tbFirstName.ID = "tbFirstName"; tbFirstName.Attributes.Add("Name", "tbFirstName"); divFirstName.Controls.Add(tbFirstName); 

然后将代码放在点击事件中。 (我知道我的命名很糟糕,纯粹是为了更好地理解)。