ViewModel从视图到控制器都是null

时间:2015-07-03 19:49:23

标签: asp.net-mvc asp.net-mvc-4

我的代码如下所示。有人可以帮助我,我无法发送模型进行查看。

ViewModel类 IEnumerable<CarList> MyCarPositions

在我看来。

@model TestMVC.ViewModel.
foreach (var item in Model.MyCarPositions)
{
    @Html.TextBoxFor(x => item.Name)
    @Html.TextBoxFor(x => item.Brand)
}

我的控制器

ViewModel carviewmodel = new carviewmodel();

[HttpGet]
public ActionResult Index()
{     
    carviewmodel.MyCarPositions = repository.GetCarPositions();
    return View(carviewmodel);     
}

[HttpPost]
public ActionResult Index(ViewModel carvmodel)
{
    // Here in httppost carvmodel comes as null.
}

2 个答案:

答案 0 :(得分:1)

您的foreach循环正在生成重复的name属性而没有不能绑定到模型的索引器。由于重复的id属性,它也会生成无效的html。您需要使用custum EditorTemplate为集合中的类型生成集合,或使用for循环。

您没有向您展示模型,但如果使用MyCarPositions循环选项,则属性List<T>必须为for

@model TestMVC.ViewModel
@using Html.BeginForm())
{
  for (int i = 0; i < Model.MyCarPositions.Count, i++)
  {
    @Html.TextBoxFor(x => x.MyCarPositions[i].Name)
    @Html.TextBoxFor(x => x.MyCarPositions[i].Brand)
  }
  <input type="submit" .. />
}

这将生成绑定

所需的正确名称属性
<input type="text" name="MyCarPositions[0].Name" .... />
<input type="text" name="MyCarPositions[1].Name" .... />
<input type="text" name="MyCarPositions[2].Name" .... />

附注:您应该在控制器方法

中初始化模型
// ViewModel carviewmodel = new carviewmodel(); remove this
[HttpGet]
public ActionResult Index()
{     
  ViewModel carviewmodel = new carviewmodel(); // initialize it here
  carviewmodel.MyCarPositions = repository.GetCarPositions();
  return View(carviewmodel);     
}

答案 1 :(得分:0)

我可以立即看到可能导致您出现问题的语法错误。

foreach (var item in Model.MyCarPositions)
        {
             @Html.TextBoxFor(x => item Name <--- missing a '.' and a closing bracket
            @Html.TextBoxFor(x=>item.Brand)
        }

应该是:

foreach (var item in Model.MyCarPositions)
        {
             @Html.TextBoxFor(x =>item.Name)
            @Html.TextBoxFor(x=>item.Brand)
        }