15

複数の HTML チェックボックスがある場合:

<input type="checkbox" name="catIDs" value="1" />
<input type="checkbox" name="catIDs" value="2" />
...
<input type="checkbox" name="catIDs" value="100" />

アクションで FormCollection から整数の配列を取得するにはどうすればよいですか。

public ActionResult Edit(FormCollection form)
{
    int [] catIDs = (IEnumerable<int>)form["catIDs"]; // ???

    // alternatively:
    foreach (int catID in form["catIDs"] as *SOME CAST*)
    {
        // ...
    }

    return View();
}

注:関連する質問を読みましたが、アクションパラメーターを変更したくありません。Edit(int [] catIDs).

4

2 に答える 2

20

同じ名前のコントロールが複数ある場合、それらはカンマ区切りの値です。言い換えると:

string catIDs = form["catIDs"];

catID は「1、2、3、...」です。

したがって、すべての値を取得するには、次のようにします。

string [] AllStrings = form["catIDs"].Split(',');
foreach(string item in AllStrings)
{
    int value = int.Parse(item);
    // handle value
}

またはLinqを使用:

var allvalues = form["catIDs"].Split(',').Select(x=>int.Parse(x));

次に、すべての値を列挙できます。

于 2010-04-11T16:48:50.507 に答える
17

より安全な方法は、使用することです。form.GetValues("CatIds")これにより、投稿で渡された配列が取得されます。入力にコンマが含まれている場合に備えて。

于 2012-07-05T15:31:02.450 に答える