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;
}

2 つを編集します。

見たい動作を得るために使用できるトリックを次に示します。まず、拡張メソッドを定義します。

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 に答える