私は、ユーザーが顧客の連絡先情報を入力する必要があるWebページを持っています。彼らは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はすべてを保存する処理できないため、このコードは動作しません。その制御データ。しかし、すでに追加されたコントロールを別の方法で保存することはできません。
コントロールのビューステートは何も保存せず、ユーザーがいくつかのデータを最初のコントロールに入れて、2番目のコントロールを追加したときにデータが失われないようにする必要があります。そうです。
Viewstateにある特別な理由はありますか?代わりにSessionを試すことができます。 – asawyer
セッションはうまくいくが、ユーザーがページを離れるとセッションがいっぱいになることはないだろうか? –
セッションは、ページベースの状態のための場所ではありません。 1つは、余計な対策を講じない限り、ユーザーは2つの別々のウィンドウで2つのページを表示できないことです。これはほとんどのWebアプリケーションで可能になるはずです。 –