2017-05-05 6 views
2

私のやりたいことを言いたいと思っているので、私のタイトルはおそらくひどいです。実際に保存せずにMVCで部分オブジェクトを編集する

私は潜在的にこのような何かに見えたレコードの膨大な数含めることができますオブジェクトがあります。

public class AssignmentGenerator : BaseGenerator 
{ 
    public bool IsLibrary { get; set; } = false; 
    public List<LineItem> LineItems { get; set; } = new List<LineItem>(); 
} 

public class LineItem 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
} 

私はフォームが作成したオブジェクトの値の編集を可能にするが、それは可能です非常に大きくなる広告申込情報のリスト(私が持っている一例は〜3000です)。この場合、広告申込情報リストをページビューリストに表示して、一度に10〜50個のアイテムを編集できるようにしたいと考えています。
ページングの方法に関するチュートリアルや記事をたくさん読んだことがありますが、私が見つけたものはどれも大量のデータを編集する方法にはなりません。ユーザーが実際に[保存]ボタンをクリックするまで、各ページの変更をデータベースに保存する必要はありません。オブジェクトに値を格納し、必要に応じて値を取得し、ユーザーのアクションに応じて保存する方法はありますか?

答えて

2

答えは「はい」です。方法はありますか。あなたはプログラマーです。あなたが望むことを行うことができます。詳細な説明なしで実際のコード例を与えるのは難しいので、あくまでもあいまいな指針です。

あなたは自分の変更を保存するためにどこか持っていますが、ステージングデータベースに保存することを選択するか、サーバ上のメモリにあなたのAssignmentGeneratorを維持し、ちょうど彼らがページ(1台のサーバーまたは固定セッションを想定したときに、コレクションを更新することができます)。

(Getエンドポイントだけでなく)ユーザーがページを変更したときに、オブジェクトの現在の状態をポストする必要があります。実際のデータベースに保存する必要はありません。一時的なコピーを更新するだけです。 [保存]ボタンは、一時的なコピーを実際のデータストアに移動する別のコントローラアクションをトリガする必要があります。

+0

私の経験は、フォームとサービスを勝ち取っているので、これが初心者であればお詫び申し上げます。この私の質問には、どのようにコントローラのオブジェクトの状態を維持するのだろうか? – Lance

+1

あなたはそうではありません - 間違いなくコントローラそのものではない、つまりそれは共有されています。 1つのオプションはセッションデータとして格納することができます - http://stackoverflow.com/questions/28154081これはメモリ内のセッションか、ソリューションがスケーラビリティが必要な場合は分散キャッシュによってバックアップされます。彼らがどのように動作するかを理解するために、最初にセッションをもっと読むことをお勧めします。 –

関連する問題