2011-02-03 2 views
7

linqyFormCollection을 특정 문자열로 시작하는 키만 포함하는 Dictionary<string,string>으로 분할하는 방법이 있습니까? 특정 문자열로 시작하는 키로 FormCollection 자르기

는 (이 질문은 기본적으로 this-과 동일>하지만, C에 대한 #/FormCollection 대신 파이썬 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."); 

배경 :이 같은 한 줄 읽을 수 있다면 좋을 것 문맥의 asp.net MVC, 그리고 동적 사전과 형태 전지.

또한이 질문과 비슷합니다 (Return FormCollection items with Prefix).

그리고이 대답을 읽으면서 How to build C# object from a FormCollection with complex keys - 양식 게시를 사용하지 않고 JSON을 보내는 것이 나을지 궁금해지기 시작했습니다.

+0

코드에 어떤 문제가 있습니까? –

+0

항상 * problem *을 설명해야합니다. 여기에 "나는 무언가를하고 있는데 이것이 내가하는 일"이라고 말하는 것처럼 들리지만, 현재의 해결책이 왜 좋지 않은지 알려주지는 않습니다. –

+0

고마워, 나는 왜 그것이 좋지 않은지에 대한 질문을 편집했다. (단어 "Edit"로 아무 것도 불평하지 않는 것처럼 보이지 않는다.) – 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

나는 muy conde 작품을 매력처럼 사용합니다. 당신이 모를 경우에 대비해 mvc인가요? – smashraid

관련 문제