私のクライアント側のjqGridに取り込むデータの大きなリストを取得します。セッションではなくキャッシュから読み込まれたグリッド上のチェック済みの行を永続化するにはどうすればよいですか?
Cache["SharedData"].Add(lotsOfRecords);
このグリッドは、ユーザーが処理のためにレコードをチェックすることができます:多くの人々がそれを使用するので、私は、その後、キャッシュに格納
List<MyData> lotsOfRecords = getData();
。
私が最初に考えたのは、オブジェクトbool Selected { get; set; }
をMyData
オブジェクトに追加し、誰かがフィールドをチェックするたびにそれを切り替えることでした。明らかに、これは共有キャッシュなので動作しません。私はJoe Userに、Bill Userがチェックしたくないものをチェックしたくありません。
次のアイデアは、セッションの中にDictionary<int, bool>
を格納し、レコードのIDをチェックされたステータスにマッピングすることでした。これは悪くはなかったが、.NETのオブジェクトを組み合わせるための簡単な方法はありませんから、私は不格好匿名オブジェクトなしで私のグリッドにそれをダウン送信するためにきれいな方法が表示されない:
return lotsOfRecords.Select(record => {
record.Id,
record.Name,
...
myDictionary[record.Id] // true/false for checked
};
だろう解決策ですが、オブジェクトに多くのフィールドがあり、同様の方法で数ページにわたって使用すると、クリーナー・デザイン・パターンがあると考えています。どんな提案も大歓迎です。前もって感謝します!
Btw、私の現在の環境はjQuery/UIとjqGridのASP.NET MVC 3です。
右、私はそのようにそれを組み合わせることができ、それはレイヤーを追加します。おそらく、私はjqueryの '$ .extend()'メソッドで甘やかされています。私は小道具をすべて同じネスティングレベルでしたかった。 – IronicMuffin
@IronicMuffinもちろん、C#のような静的言語では不可能なことは明らかですが、あなたが本当に「1つのレイヤー」(私は正直言って必要ではないと思う)を望むなら、元のクラスのすべてのプロパティを持つ新しいクラスを作成できます、および1つのブール値のプロパティ。 AutoMapperを使用して、古いオブジェクトから新しいオブジェクトを構築することができます。あなたが私に尋ねるならば余計に、それはあなたが得ることができる最も近いものです。 – BFree
右...不可能/簡単な解決策はありません。それについての洞察をいただきありがとうございます。 – IronicMuffin