如何自动添加文本框

时间:2012-02-28 09:32:37

标签: c# javascript jquery asp.net

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

3 个答案:

答案 0 :(得分:2)

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

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

最重要的两个概念是:

  • dynamic controls时间
  • 添加right
  • 尝试和maintain 在回发之间的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。这样做的主要原因是,当您更新控件的数量时,您在页面的生命周期中执行此操作,并且在完整的回发中,该值可能不会以您对回发的预期方式增加。如果整个页面没有回发只是为了修改它的一小部分,它对用户来说看起来也更好。

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

Truly Understanding Dynamic Controls

你应该对此进行一些阅读,因为viewstate,页面生命周期,客户端呈现和其他因素的结合使得这是ASP.Net中最棘手但最有趣的技术之一

答案 1 :(得分:0)

如果考虑使用jquery,事情可能非常简单:

<div id="text_box_container"> </div>

<input type="button" value="text box inserter" id="text_box_inserter" />

现在是javascript / jquery部分

$('#text_box_inserter').click(function(){
    $('#text_box_container').append('<input type="text" />');
})

答案 2 :(得分:0)

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

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

divFirstName.Controls.Add(tbFirstName);

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