非常に基本的なモデル:
public class Person
{
public string Name;
public int Age;
}
と非常に単純なビュー:
@model DynWebPOC.Models.Person
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Hello, @Model.Name
<br/>
You're getting old at @Model.Age years old now!
@using(Html.BeginForm("Index","Test",FormMethod.Post))
{
<fieldset>
<label for="name" style="color: whitesmoke">Name:</label>
@Html.TextBoxFor(m => m.Name)
<br/>
<label for="age" style="color: whitesmoke">Age:</label>
@Html.TextBoxFor(m => m.Age)
<br/>
<input type="submit" value="Submit"/>
</fieldset>
}
そして、非常に単純なコントローラー:
public class TestController : Controller
{
[HttpGet]
public ActionResult Index()
{
object model = new Person {Name = "foo", Age = 44};
return View(model);
}
[HttpPost]
public ActionResult Index(Person person)
{
return View();
}
}
画面が読み込まれると、値がページに正しくバインドされます。しかし、送信ボタンを押すと、人物オブジェクトの年齢と名前がすべて null 値になります。
Html.TextBoxFor を使用したため、すべてのバインドが正しく設定され、オブジェクトが自動的に POST にバインドされているはずではありませんか? GET..でうまくバインドします。
Html.BeginForm() の呼び出しで何か見逃したのでしょうか?