2011-06-15 70 views
0

用C#的.NET 4.0和一把umbraco動態添加和持續文本框給用戶控制

我有在其上有一個按鈕,允許用戶動態地添加額外的文本框形式的用戶控制工作。我已經嘗試了很多方法,但無法在頁面加載之間持續輸入動態文本框中的任何數據。

這裏的UI:

<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方法,但問題是當頁面首次加載時,我不想要任何動態控件創建,只有當用戶每次點擊按鈕時,我都喜歡附加的控件和那些已經存在以使其中的任何數據持續存在。

任何想法?我不認爲我有希望太遠:)

回答

0

你可以在page_load中測試配置(也許是IsPostback),然後如果你需要生成控件,那麼做?

+0

是的,控件的生成工作正常,但是如果我把它放在Page_Load中,任何在現有表單中輸入的值在回發後都會丟失? – timothyclifford 2011-06-15 02:39:25

0

也許你得看看這個(系列)article。它詳細解釋瞭如何使用動態創建的控件,特別是關於如何保持ViewState。否則,我建議你去AJAX的方式(使用JavaScript創建控件,使用AJAX將數據發送回服務器以供服務器處理)。在這種情況下,您不必擔心PostBack和ViewState,並且它也會讓用戶體驗更好!

+1

謝謝我已經閱讀過這篇文章,但它更多地圍繞動態地創建控件,而我沒有任何問題。我的問題更多的是圍繞這些動態控件的價值觀在帖子背後 – timothyclifford 2011-06-15 02:40:19

+0

您是否閱讀過在文章開頭引用的其他兩篇文章?這2篇文章討論關於回發和查看狀態... – wooncherk 2011-06-15 03:40:11