我有这个ViewModel
public class MyViewModel
{
public Customer Customer{ get; set; }
public Account Account{ get; set; }
public DateTime MyDate{ get; set; }
}
此视图
@using (Html.BeginForm("Final", "Home", FormMethod.Post, new { @class = "form" }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.Customer)....
@Html.DisplayFor(m => m.Customer.FirstName) //This displays the name ok
这是我的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Final(MyViewModel viewModel)
{
viewModel.Customer.... //This is null
问题是,我不必编辑属性,只显示它们然后保存到数据库,这就是我使用HiddenFor的原因,但Customer和Account属性绑定为null。 问题是什么?也许是HiddenFor?
PS:我有GET方法,我在其中执行适当的返回View(viewModel)
这是我传递ViewModel
的地方 [HttpGet]
public ActionResult Final()
{
var viewModel = new MyViewModel
{
//set the properties, etc
};
return View(viewModel);
}
答案 0 :(得分:2)
客户是一个复杂的对象,因此您需要将Customer的每个属性作为隐藏字段。
@Html.HiddenFor(m => m.Customer.FirstName)
@Html.HiddenFor(m => m.Customer.LastName)
或者,您可以将整个MyViewModel
存储在使用会话状态的TempData
中。