<目次>
(1) ASP.NET MVCでformをSubmitする方法
(1-1) 概要
(1-2) HTMLを使ってformをsubmitする方法
(1-3) サンプルプログラム
(1-4) 補足
(1) ASP.NET MVCでformをSubmitする方法
(1-1) 概要
今回は「formをSubmitする方法」についてご紹介します。formのSubmitは例えば、会員登録画面でプロフィール(名前、年齢、性別、住所など)を入力して「完了」とか「送信」ボタンを押すと、後続の画面に引き継がれていきますよね。そのような、フォームにユーザさんが入力した情報を、連携する事をformのSubmitと呼んできます。
(1-2) HTMLを使ってformをsubmitする方法
こちらは最も基本的な方法で、言語によって微妙なお作法の違いがあれども、汎用的に使える方法です。Java(JSP/Servlet)でもHTML側の記述は全く同じで、Controller側(JavaではServlet)でのパラメータの受け取り方は若干異なりますが、HTML部分の書き方は他言語にも通ずるものである、という点を頭の片隅に置いて頂けたらと思います。
<form method="POST" action="Index2">
<!-- フォームの内容を記述 -->
<input type="submit" value="送信" />
</form>
「フォームの内容を記述」の所には名前、年齢、性別、住所といったフォームの入力項目があるイメージです。そしてHTMLでformをsubmitする際に、リクエストに乗せて送りたい項目の入力値(例:名前、年齢、性別、住所)には、「name属性」を設定する必要があります。name属性を設定する事で、その値がControllerのPOSTメソッドの引数と自動で紐づけ(リンク)されます。
(例)
<!-- name属性「name="name_box"」を設定 --> <input type="text" id="namebox" name="name_box" />
[HttpPost]
public ActionResult Index2(String [画面項目のname属性])
{
//# Index2のPOSTリクエストの場合は、入力された値を後続Index2に連携するためにViewBagに
ViewBag.[キーの名前]= [画面項目のname属性];
//# Index2のビューを表示
return View();
}
(構文:Controller)のポイント
| ●コード | ●説明 |
| [HttpPost] | 「Index2」に対してPOSTリクエストが来た時に実行される処理である事を示す記述です。 |
| Index2(String [画面項目のname属性値]) | メソッドの引数には、入力画面から受け取る値を列挙します(名前、性別、年齢、住所など)。 注意点として、引数の名前はHTML画面のname属性と合わせる必要があります。 ⇒(図121) |
| ViewBag.[キーの名前]= [画面項目のname属性]; | 引数で受け取った画面の入力値を後続のビューに送るために、「ViewBag」に格納しています。 |
(図121)Controllerのメソッド引数とViewの項目のname属性を一致させる

<div>@ViewBag.Name</div>
(1-3) サンプルプログラム
以上の構文を踏まえて、ViewやContoller全体のサンプルプログラムをご紹介します。
●View(入力画面)
名前:ButtonSubmitTest2.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<!--<script src="~/Scripts/Home/JavaScript.js" type="text/javascript" charset="utf-8"></script>-->
<title>Submit Test #2</title>
</head>
<body>
<h2>Submit Test #2</h2>
<!-- フォームをPOSTリクエストを送る。送り先の画面は「Index2」 -->
<form method="POST" action="Index2">
<table border="1">
<tr>
<th>NAME</th>
<!-- name属性「name="name_box"」を設定する事で、遷移先で受け取り可能になる -->
<td><input type="text" id="namebox" name="name_box" /></td>
</tr>
<tr>
<th>AGE</th>
<td><input type="text" id="agebox" name="age_box" /></td>
</tr>
</table>
<!-- 送信ボタンのtypeはsubmitを指定する -->
<input type="submit" value="送信2" />
</form>
</body>
</html>
●Controller
名前:HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCTest.Controllers
{
public class HomeController : Controller
{
//# テスト:他画面にPOSTで遷移
//# ButtonSubmitTest2 ⇒ Submit ⇒ Index2
//# 入力画面(ButtonSubmitTest2)
public ActionResult ButtonSubmitTest2()
{
//# ButtonSubmitTest2の画面(View)を返却
return View();
}
//# 結果表示画面(Index2)
[HttpGet]
public ActionResult Index2()
{
//# Index2のGETリクエストの場合はビューをそのまま返却
return View();
}
[HttpPost]
public ActionResult Index2(String name_box,String age_box)
{
//# Index2のPOSTリクエストの場合は、入力された名前、年齢を後続Index2に連携
ViewBag.Name = name_box;
ViewBag.Age = age_box;
//# Index2のビューを返却
return View();
}
}
}
(図132)

●View(結果表示画面)
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>HelloWorld #2!</div>
<!-- ViewBagに格納した値を表示 -->
<div>@ViewBag.Name</div>
<div>@ViewBag.Age</div>
</body>
</html>
(図133)

(図134)

(操作動画)
(1-4) 補足
ちなみに、formの記述方法はいくつかあり、以下の2つは同じ意味になります。
(構文:入力画面側のHTML)
<form method="POST" action="Index2">
<!-- フォームの内容を記述 -->
<input type="submit" value="送信" />
</form>
(構文:入力画面側のHTML)
@using (Html.BeginForm("Index2", "Home", FormMethod.Post))
{
<!-- フォームの内容を記述 -->
<input type="submit" value="送信1" />
}