2012-03-03 6 views
0

私はASP.Netユーザー作成ウィザードを持っています。私が含まれている追加のステップの1つは、顧客が仲間の同僚と結ぶ可能性がある接続の連絡先情報を収集して、設定されているアカウントが一括してログインを作成できるようにすることです。私がContactPersonに使うユーザーは、キー情報(名前、DoB、会社名、住所、州)のテキストボックスで構成されています。アドバイス:動的に作成されたユーザーコントロールのユーザー入力を永続

単純なボタンを使用して、RadPanelItemsに使用される適切な入れ子構造を作成するAddContactsメソッドを呼び出します。最初のアイテムを追加するとすぐに、うまく動作しますが、2番目のアイテムはポストバック経由で最初のアイテムを消去し、データの永続性が失われます。

このユーザーコントロールはEF4エンティティにマップされます。具体的には、このページにはList ContactListというメンバーがあります。以前の連絡先から収集したエンティティデータを保持して、ポストバックが発生したときにユーザーコントロール(前記データを含む)をフォームに再び追加するのに一番いい方法は何ですか?

私は提案があり、ベストプラクティスの解決策を探しています。前もって感謝します。

答えて

2

データを保持するまでは、HttpContext.Currentを使用できます。 セッションこの情報を格納するオブジェクト。セッション(サーバーに保存)は大規模なデータの方が適しています。小さなデータの場合は、リクエストごとに前後に送信され、ページサイズをすばやく爆発させるので、ViewState(ページの非表示フィールドに格納されます) 。議論についてViewState Vs Session ... maintaining object through page lifecycleまたはhttp://msdn.microsoft.com/en-us/library/ms972976.aspx

Annotherオプション(ない状況ための良いもの)を使用すると、メールにURLを貼り付けコピーして、まだ持っていることができるという利点を持つIDまたは主キーのような非常に小さなデータのQueryParametersで見ます情報http://www.codeproject.com/Articles/5876/Passing-variables-between-pages-using-QueryString

を参照してください。新しい連絡先を追加するたびに、最後にデータを保存するまでこのような処理を行います。

var contacts = new List<EF4Entity>() 
if (Session["Contacts"] != null){ 
    contacts = Session["Contacts"] as List<EF4Entity> 
} 

var newContact = new EF4Entity() 
//fill your new contact here 
contacts.Add(newContact) 

//bind your RadPanelItems here 

//store it to the session 
Session["Contacts"] = contacts 
+1

私たちはInProcセッション状態を使用しているので、このアプローチでは意図しない結果がありますか? InProcで動作する場合、これは実行可能な答えのように見えます。 – jjhayter

+0

Sessionに格納されたオブジェクトは[Serializable]でなければなりません。ほとんどのオブジェクトですが、カスタムには[Serializable]が必要です。シリアル化を実装する作業がもう少しあります。それはちょうどうまく動作する非常に良いチャンスがあります! InProcセッションは、IISで設定されている使用可能なメモリによって制限されます。しかし、オブジェクトを一時的に保管し、同時に1000ユーザーのユーザーに対処しない限り、私はこれについて心配しません。より多くのセッションスペースが必要な場合は、SQLSessionを調べることができます。 – Elementenfresser

0

あなたは持続しない限り、中間の保管場所を使用する必要があると(私はどんな複雑なビジネスアプリケーションのための柔軟性のない見つける。)すべてのリクエストでデータベースにデータを取得します。

私はそれに近づいています。

ASP.Netセッションのラッパーを作成して、一意のオブジェクトキーがあることを確認し、セッションごとに最大数のオブジェクトをユーザーごとに適用できるようにしました。私の各ページは、単純なインタフェース(私はそれをIModelと呼んでいます)を実装するオブジェクトにバインドします。このようにして、すべてのページ/ビューのモデルを一貫して扱うことができ、どのページにも状態を認識させることができます。

ダイナミックコントロールは、ページのモデルに直接または子孫に追加されます。この方法論は、単純または複雑なオブジェクト構造を容易にサポートし、ページ間でデータを共有することも可能です。

関連する問題