我有一個網頁,用戶需要輸入客戶聯繫信息。他們可以從0進入無限數量的聯繫人。動態添加控件到控件列表
我創造了這個頁面代碼頁:
<ajaxToolkit:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptManager1" />
<asp:PlaceHolder ID="phCustomerContacts" runat="server" EnableViewState="true">/asp:PlaceHolder>
<asp:LinkButton ID="btnAddContact" runat="server" OnClick="btnAddContact_Click" CssClass="LinkButton" Text="Add Contact"/>
在我後面的代碼添加此:
public void btnAddContact_Click(object sender, EventArgs e)
{
IList<CustomerContactProfile> customerContacts = new List<CustomerContactProfile>();
if (ViewState["CustomerContactList"] != null)
customerContacts = (List<CustomerContactProfile>)ViewState["CustomerContactList"];
CustomerContactProfile contactProfile = (CustomerContactProfile)LoadControl("~/Controls/Embedded/CustomerContactProfile.ascx");
customerContacts.Add(contactProfile);
foreach (CustomerContactProfile contact in customerContacts)
phCustomerContacts.Controls.Add(contact);
ViewState["CustomerContactList"] = customerContacts;
}
此代碼不起作用,因爲ViewState中不能處理存儲所有的那控制數據。但是,我想不出另一種方式來存儲已添加的控件。
asp:PlaceHolder
控件的視圖狀態不保存任何內容,我需要保存控件,以便如果用戶將一些數據放入第一個控件中,以便在添加第二個控件時數據不會丟失並且等等。
任何特殊的原因,它必須在視圖狀態?您可以嘗試使用會話。 – asawyer 2011-02-07 14:05:50
會話會很好,但如果用戶離開頁面不會填滿會話嗎? – 2011-02-07 14:11:09
會話絕對不是基於頁面狀態的地方。首先,這意味着,除非採取額外措施,否則用戶無法在兩個單獨的窗口中查看其中的兩個頁面 - 這在大多數Web應用程序中都應該可以實現。 – 2011-02-07 16:20:00