しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC でパラメータを配列で受け取る

可変個のパラメータを受け取るのはいろいろとめんどくさいですよね。PHP などでは以下のように name 属性の値に [] を付けて配列であることを指定していました。

<!-- 配列にマッピングしたい -->
<input type="text" name="values[]" />
<input type="text" name="values[]" />

しかし、ASP.NET MVC ではアクションの引数を配列にするだけで実現できます。

public ActionResult Update(string[] values)
{
    // この時点で values に値が格納されている
    return View();
}

HTML は name の値から [] を削除します。

<!-- [] は不要 -->
<input type="text" name="values" />
<input type="text" name="values" />

これだけで配列として値が取れます。便利ですね。

MVC のバインダはかなり賢いので、アップロードされたファイルに対しても同様に配列で受け取ることが出来ます。

// 配列にするだけ
public ActionResult Upload(HttpPostedFileBase[] files)
{
    // files にアップロードされたファイルの情報が格納されている
    return View();
}

HTML 側は type の値を変えるぐらいなので省略。基本は一緒です。

これを調べているときに気が付いたんですが、Request.Files を使って同じ名前で送信されたファイルを受け取る方法ってないみたいですね。調べたのですが、値を配列で返してくれるメソッドなどが見つかりませんでした。

なので、可変個のファイルをアップロードするには ASP.NET MVC を使ってバインダに頑張ってもらうのが一番楽そうです。