如何解决动态添加和持久保存TextBoxes到用户控件
| 使用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中测试配置(也许是IsPostback),然后如果需要生成控件,可以吗?
, 也许您必须看看这篇(系列)文章。它详细说明了如何使用动态创建的控件,尤其是如何持久化ViewState。
否则,我建议您采用AJAX方式(使用JavaScript创建控件,使用AJAX将数据发布回服务器以供服务器处理)。在这种情况下,您不必担心PostBack和ViewState,它也使用户体验更好!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。