有什么方法可以重现面板的内容。例如,我有一个面板,它有两个文本框。点击更多按钮时,我想在下面有另一个面板,下面有两个文本框,如第一个或添加在现有面板中添加两个文本框。我的最终目标是在用户单击更多按钮时添加控件并从这些控件中获取数据。这是我想重现的面板内的控件
我可以通过服务器端添加布局中显示的控件的任何可能方式?请帮助!
有什么方法可以重现面板的内容。例如,我有一个面板,它有两个文本框。点击更多按钮时,我想在下面有另一个面板,下面有两个文本框,如第一个或添加在现有面板中添加两个文本框。我的最终目标是在用户单击更多按钮时添加控件并从这些控件中获取数据。这是我想重现的面板内的控件
我可以通过服务器端添加布局中显示的控件的任何可能方式?请帮助!
您显然可以在“更多按钮”的按钮单击事件中从代码后面添加动态控件。
单击此处获取更多参考:
有很多方法可以解决这个问题。您可以使用纯 JavaScript 或 jQuery 自己添加适当的 DOM 元素,或使用一些 JS MV* 框架,如 KnockoutJS(例如: http: //knockoutjs.com/examples/contactsEditor.html)或 AngularJS。
尝试这个
你的 aspx 页面添加
<asp:TextBox runat="server" ID="TextBox1" />
<asp:TextBox runat="server" ID="TextBox2" />
<asp:Button Text="Add" ID="btnAdd" OnClick="btnAdd_Click" runat="server" />
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<asp:TextBox runat="server" ID="txt1" Text='<%# Eval("str1") %>' />
<asp:TextBox runat="server" ID="txt2" Text='<%# Eval("str2") %>' /><br />
</ItemTemplate>
</asp:Repeater>
在后面的代码中
protected void btnAdd_Click(object sender, EventArgs e)
{
List<temp> lst = GetItemFromRpt();
lst.Add(new temp
{
str1=TextBox1.Text,
str2 = TextBox2.Text
});
rpt.DataSource = lst;
rpt.DataBind();
}
private List<temp> GetItemFromRpt()
{
List<temp> lst = new List<temp>();
for (int i = 0; i < rpt.Items.Count; i++)
{
temp obj = new temp();
obj.str1 = ((TextBox)rpt.Items[i].FindControl("txt1")).Text;
obj.str2 = ((TextBox)rpt.Items[i].FindControl("txt2")).Text;
lst.Add(obj);
}
return lst;
}
public class temp // instead of temp you can use whatever your entity class you need
{
public string str1 { get; set; }
public string str2 { get; set; }
}
如果您想在客户端使用 jQuery 实现此目的,则使用“closest()”(查找要在添加/删除按钮等附近重复的源元素/行,特别是如果它是表格/网格格式)结合 'clone()' 功能,(制作源元素/行的副本),然后您可以将克隆粘贴到目标容器中。以下链接可能会帮助您实现您想要的: jQuery Clone table row
但是在 Asp.Net WebForms 中执行此操作应该非常简单。
另外,请注意,通过在描述中指定更多详细信息(例如,MVC、WebForms 等,您为查找/解决问题所做的试验)以及帮助节省其他的时间也是如此。欲了解更多信息:https ://stackoverflow.com/questions/how-to-ask