以下のような ViewModel があります。
public class CheckoutViewModel
{
public string ProductNumber { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public Input UserInput;
public class Input
{
public string Email { get; set; }
public string Phone { get; set; }
}
}
そして、次のようなアクション:
[HttpPost]
public ActionResult Index(CheckoutViewModel model)
{
// ...
return View();
}
そして、私のモデルは以下のようにバインドされています:
@model GameUp.WebUI.ViewModels.CheckoutViewModel
@using (Html.BeginForm("Index", "Checkout", FormMethod.Post))
{
@Html.AntiForgeryToken()
<!-- some HTML -->
@Html.LabelFor(m => m.UserInput.Email)
@Html.TextBoxFor(m => m.UserInput.Email)
@Html.LabelFor(model => model.UserInput.Phone)
@Html.TextBoxFor(model => model.UserInput.Phone)
<button>Submit</button>
}
フォームを送信すると、UserInput が null になります。ASP.NET MVC がネストされた型をバインドできることは知っていますが、このコードではバインドできません。また、次の方法でメールと電話の値を取得できます。
var email = Request.Form["UserInput.Email"];
var phone = Request.Form["UserInput.Phone"];
多分私は何か間違ったことをします!これは、Web のどこにでもあるシンプルなモデル バインディングです。