ASP.NET MVC 4で、ユーザの入力値を取得する時には、Razor構文でクラスのプロパティを指定すると簡単にできますが、モデルでストアドを使ってデータ登録をする場合ストアドに渡すデータのクラスが作られないので困ります。
そんな時はユーザが入力するHTMLのタグでidではなくnameを書いておきます。
WebFormでは、サーバコントロールでidを指定してたと思うのでうっかりidを書いてしまうかもしれませんが、nameの方を見るようなので間違わないように。
またフォームはBeginFormで、コントロールとアクションを指定して、引数にはタグのname属性の値と同じ名前の仮引数を作ります。
またこの時のアクションにはHttpPost属性をつけておくとよいでしょう。
またユーザの入力値が空欄である場合もあるのであれば、それに対する仮引数の型はstringがよいかもしれません。
アクションの中でnullかどうか判断して型変換をするのがよいかもしれません。
cshtmlファイル
@using (Html.BeginForm("PostOrder", "myWebSite"))
{
<p>
氏名:<input type="text" name="ClientName" maxlength="25" /><br />
依頼内容<br />
<textarea name="order" cols="40"></textarea><br /><br />
<input type="submit" value="送る" /><input type="reset" />
</p>
}
コントローラーのアクション
[HttpPost]
public ActionResult PostOrder(string ClientName, string order)
{
int result = 0;
//変数orderを数値に変更
int n = int.TryParse(order, out result) ? result : 0;
//ストアドを使ってデータ登録
int err = db.sp_RegisterOrder(ClientName, "利尻昆布", n);
return Redirect("/");
}
