formcollection如何访问html表单关联数组

时间:2013-02-28 09:55:53

标签: c# arrays associative-array

我尝试访问c#中的关联数组。每个帖子将数组发送到我的c#mvc Web应用程序。

即G。 HTML格式

 <Input Name="myArray[hashKey1]" value="123">
 <Input Name="myArray[hashKey2]" value="456">

并且在c#中我需要键和值 - 可能还有数据字典?!

    [HttpPost]
    public ActionResult Index(FormCollection collection)
    {
    Dictionary<string, string> = KEY, VALUE

     ...
    }

我希望你能跟着我: - /

1 个答案:

答案 0 :(得分:0)

是的,你可以;但是你需要指定POST的方法。

这不起作用:

<form id="frmThing" action="@Url.Action("Gah", "Home")">
    <input id="input_a" name="myArray[hashKey1]" value="123" />
    <input id="input_b" name="myArray[hashKey2]" value="456" />

    <input type="submit" value="Submit!"/>
</form>

这样做:

<form id="frmThing" action="@Url.Action("Gah", "Home")" method="POST">
    <input id="input_a" name="myArray[hashKey1]" value="123" />
    <input id="input_b" name="myArray[hashKey2]" value="456" />

    <input type="submit" value="Submit!"/>
</form>

编辑:要实际访问C#中的详细信息,在您的示例中,您将执行以下操作之一:

String first = collection[0];
String secnd = collection[1];

String first = collection["myArray[hashKey1]"];
String secnd = collection["myArray[hashKey2]"];

甚至:

foreach (var item in collection) {
    string test = (string)item;
}

编辑二:

这是一个可以用来获取想要看到的行为的技巧。 首先,定义一个扩展方法:

public static class ExtensionMethods
{
    public static IEnumerable<KeyValuePair<string, string>> Each(this FormCollection collection)
    {
        foreach (string key in collection.AllKeys)
        {
            yield return new KeyValuePair<string, string>(key, collection[key]);
        }
    }
}

然后在你的行动结果中你可以这样做:

public ActionResult Gah(FormCollection vals)
{
    foreach (var pair in vals.Each())
    {
        string key = pair.Key;
        string val = pair.Value;
    }

    return View("Index");
}