执行此操作的最佳方法可能是将两个文本框都放在用户控件中。然后,此用户控件可以封装属于两个文本框的所有逻辑;它可以计算两个值之间的差异,例如,封装所有的验证等等等等。你只需要写一次!
在页面中添加占位符;给它一个“DynamicControlHolder”或类似的ID。您还需要一个隐藏字段 - DynamicControlCount - 您可以使用它来存储您添加的动态控件的数量。
两个最重要的概念是:
所以,当页面第一次加载时,你可以在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 中最棘手但最有趣的技术之一