C# 使用LINQ从Request.Form.AllKeys生成字典

C# 使用LINQ从Request.Form.AllKeys生成字典,c#,linq,dictionary,model-binding,formcollection,C#,Linq,Dictionary,Model Binding,Formcollection,因此,我有一个页面,其中包含专门为绑定到字典的模型所做的输入。就像下面的例子 "person[0].Key" "Tom" "person[0].Value" "cat" "person[1].Key" "Jerry" "person[1].Value" "mouse" 因此,使用.NETMVC,这将像我希望的那样绑定到字典。但是,我需要在旧的aspx页面的helper方法中复制此行为。所以我考虑自己解析表单集合,并从中创建一个字典。类似于此(我知道这不太正确): var

因此,我有一个页面,其中包含专门为绑定到字典的模型所做的输入。就像下面的例子

"person[0].Key"    "Tom" 
"person[0].Value"  "cat" 
"person[1].Key"    "Jerry" 
"person[1].Value"  "mouse"
因此,使用.NETMVC,这将像我希望的那样绑定到字典。但是,我需要在旧的aspx页面的helper方法中复制此行为。所以我考虑自己解析表单集合,并从中创建一个字典。类似于此(我知道这不太正确):

var people=Request.Form.AllKeys.Where(n=>n.StartsWith(“person”);
var x=people.Zip(Request.Form.AllKeys.Where(n=>n.StartsWith(“person”)).Skip(1),(key,value)=>newkeyvaluepair(key,value));
然而,这似乎有点老套,它只是不按顺序工作,并没有脱离键和值的实际命名约定


有没有更好的方法来完成我想做的事情。通过LINQ或访问模型绑定器。

ASP.NET是开源的。您可以在这里查看ModelBinder是如何工作的:尤其是第722行似乎就是您要查找的内容。
var people = Request.Form.AllKeys.Where(n => n.StartsWith("person"));
var x = people .Zip(Request.Form.AllKeys.Where(n => n.StartsWith("person")).Skip(1), (key, value) => new KeyValuePair<string, string>(key, value));