2015-07-03 117 views
0

我有我的代码如下。可以有人帮我在这我不能发送模型来查看。ViewModel从视图到控制器为空

ViewModel class 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. 
} 

回答

1

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

您还没有表现出你的机型,但性能MyCarPositions如果需要使用for循环选项是List<T>

@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);  
} 
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) 
     } 
+0

THX dustiny对不起,这是错字。但是我无法在我的控制器中得到模型,它是空的。在视图源中。html生成如下, user2107843

相关问题