2012-02-28 70 views
0

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

+0

可能重复的[JQuery的 - 创建隐藏的表单元素上飞](http://stackoverflow.com/questions/2408043/jquery-create-hidden-form-element-on-the -飞)。或者你想要服务器端?然后看看[这里](http://www.singingeels.com/Articles/Dynamically_Created_Controls_in_ASPNET.aspx)。 – CodeCaster 2012-02-28 09:34:56

+0

尝试看看这里:http://stackoverflow.com/questions/4630095/dynamic-textbox-on-linkbutton-click – 2012-02-28 09:35:19

+0

如果可能的话,我想按钮生成两个文本框。 1的费用类型,另一个是价格。 tq – 2012-02-28 09:36:59

回答

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" />'); 
}) 
0

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

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

divFirstName.Controls.Add(tbFirstName); 

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

+0

谢谢。但是,我可以知道,点击事件要放什么? – 2012-02-28 09:48:34

+0

我不确定我明白你的意思。如果你有一个应该添加更多文本框的按钮,那么就把上面的代码放在按钮的click事件方法中。如果我现在感到困惑,那就让我知道,然后编辑我的原始答案。 – AndersDaniel 2012-02-28 09:52:40

+0

哈哈。我想,也许我应该睡一会儿。我只是花了8小时在我的笔记本电脑上无影无踪。但无论如何,谢谢!将更新一次,我试过雅编码:) – 2012-02-28 09:56:41

2

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

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

两个最重要的概念是:

  • 添加dynamic controlsright时间
  • 尝试和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

你应该做一些解决这个读数,因为视图状态,页面生命周期,客户端渲染和其他因素的结合使最棘手的这一个,但最有趣的技术在ASP.Net