3

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

例如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

     ...
    }

我希望你能关注我:-/

4

1 回答 1

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");
}
于 2013-02-28T10:25:22.447 回答