向用户控件动态添加并持久化TextBoxes
本文关键字:持久化 TextBoxes 添加 动态 用户 控件 | 更新日期: 2023-09-27 17:59:05
使用C#.NET 4.0和Umbraco
我有一个用户控件,上面有一个按钮,允许用户向表单中动态添加额外的文本框。我尝试了无数种方法,但无法在页面加载之间保持输入到动态文本框中的任何数据。
这是用户界面:
<div id="new-item">
<h3>Add new menu item</h3>
<div><label for="ItemTitle">Title</label><asp:TextBox ID="ItemTitle" runat="server" CssClass="title"></asp:TextBox></div>
<div><label for="ItemDescription">Text</label><textarea id="ItemDescription" runat="server" rows="5" cols="20"></textarea></div>
<div><label for="ItemPrice">Price</label><asp:TextBox ID="ItemPrice" runat="server" CssClass="price"></asp:TextBox></div>
<div class="new-item-options">
<p><strong>Menu item options (optional) </strong><asp:Button ID="AddMenuItemOption" runat="server" Text="Add Option" OnClick="AddOption" /></p>
<asp:Panel ID="MenuItemOptionsPanel" runat="server"></asp:Panel>
<asp:HiddenField ID="ItemOptionCount" runat="server" />
</div>
<div><asp:Button ID="AddItemButton" runat="server" Text="Save" /></div>
<asp:HiddenField ID="ItemID" runat="server" />
<asp:HiddenField ID="ItemOrder" runat="server" />
在AddOption按钮点击事件中:
protected void AddOption(object sender, EventArgs e)
{
var dynamicControlCount = Convert.ToInt32(ItemOptionCount.Value) + 1;
for (var option = 0; option < dynamicControlCount; option++)
{
MenuItemOptionsPanel.Controls.Add(new Literal { ID = "OptionTextLiteral" + option, Text = "<label>Option Text</label>" });
MenuItemOptionsPanel.Controls.Add(new TextBox { ID = "OptionTextBox" + option });
MenuItemOptionsPanel.Controls.Add(new Literal { ID = "OptionPriceLiteral" + option, Text = "<label>Option Price</label>" });
MenuItemOptionsPanel.Controls.Add(new TextBox { ID = "OptionPriceBox" + option });
}
ItemOptionCount.Value = dynamicControlCount.ToString();
}
我知道我需要在Page_Load或OnInit方法中创建这些动态控件,但问题是,当页面第一次加载时,我不希望创建任何动态控件,只有当用户每次单击按钮时,我才会添加额外的控件,并且那些已经存在的控件中保留了任何数据。
有什么想法吗?我不认为我离得太远了:)
你能在page_load中测试confition(可能是IsPostback)吗?如果你需要生成控件,那就去做吧?
也许你必须看看这篇(系列)文章。它详细解释了如何使用动态创建的控件,特别是如何持久化ViewState。
否则,我建议您采用AJAX方式(使用JavaScript创建控件,使用AJAX将数据发布回服务器以供服务器处理)。在这种情况下,您不必担心PostBack和ViewState,它也会让用户体验更好!