2015-07-03 95 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

相關問題