2011-02-03 14 views
7

linqyFormCollectionを特定の文字列で始まるキーのみを含むDictionary<string,string>に分割する方法はありますか?特定の文字列で始まるキーでFormCollectionをスライスする

(この質問は基本的にthis-と同じです>が、C#/ FormCollectionのための代わりのpython Slicing a dictionary by keys that start with a certain string

ここで私が問題を回避するために思い付いたものです:

public ActionResult Save(FormCollection formCollection) { 
    var appSettings = new Dictionary<string, string>(); 
    var appKeys = formCollection.AllKeys.Where(k => k.StartsWith("AppSettings.")); 
    foreach (var key in appKeys) 
    { 
     appSettings[key] = formCollection[key]; 
    } 
... 

編集:このコードの問題は、別のStartsWith文字列に対して複数回実行する必要があるため、上記を実行するための 'ユーティリティ'メソッドを作成する必要があることです。 (問題を解決する必要はありません)

formCollection.Where(k=>k.Key.StartsWith("AppSettings."); 

背景:それはのような1行を読み込むことができれば それはいいだろうコンテキストはasp.netのMVCで、動的辞書を使用してフォームのフィールド。

また、この質問に似ています - Return FormCollection items with Prefix - しかし全く同じではありません。

そして、この回答を読んでHow to build C# object from a FormCollection with complex keys - 私はフォームポストを使わなくても、代わりにJSONを送る方が良いかどうか疑問に思っていました。

+0

あなたが持っているコードは何ですか? –

+0

*問題*を常に記述するようにしてください。ここでは、「私は何かしている、そしてこれは私がやっていることです」と言っているように聞こえますが、あなたの現在の解決策が*いいのではない理由を教えてくれません。 –

+0

ありがとう、私はそれが素敵ではないと言う質問を編集した(単語 "編集"ので、あなたは何も文句を言っていないように見えない) – PandaWood

答えて

14

あなたがキー+値のコピーを新しい辞書を作成、既存の辞書を取っての「素敵な」方法を探している場合は、キーのサブセットのために、いくつかのLINQのコードがうまくこれ行います:

var appSettings = formCollection.AllKeys 
    .Where(k => k.StartsWith("AppSettings.")) 
    .ToDictionary(k => k, k => formCollection[k]); 
+0

唯一の問題は、NameValueCollectionを実装するMVC 'FormCollection'です - これはIEnumerableを実装していない - MVC3でさえ、IEnumerableを実装していないこれらのカスタムコレクションクラスを使用します...これはトピックから外れていますが、設計上の決定が悪いと思われます...? – PandaWood

+0

遺伝学を抱えるこの日、私は同意する必要があります。 –

+0

編集した回答が新しい情報に合うようになりました。 –

-6
[HttpPost] 
public ActionResult Index(FormCollection collection) 
{ 
    Dictionary<string,object> form = new Dictionary<string, object>(); 
    collection.CopyTo(form); 
    return View(); 
} 
+1

これは既に受け入れられている回答を受けた古い質問です。さらに、あなたの答えは正しいとは思われません。 – Kjartan

+0

私は魅力のような無限のコンデの作品を使用します。あなたが知らない場合はmvcですか? – smashraid

関連する問題