2016-12-05 19 views
0

我失去了一些東西,因爲選中的值將不會被髮回給控制器,因爲我的窗體的其餘部分。Textboxfor不會被髮送到控制器提交Html.BeginForm

@Html.LabelFor(m => m.Tasks) 
<ul> 
    @for(var i = 0; i < @Model.Tasks.Count; i++) 
    { 
     <li> 
      @Html.HiddenFor(x => x.Tasks.ElementAt(i).Id) 
      @Html.CheckBoxFor(x => x.Tasks.ElementAt(i).IsChecked) 
      @Model.Tasks.ElementAt(i).TaskName 
     </li> 
    } 
</ul> 

.....

var taskItems = new List <TasksModel>(); 

foreach(var task in tasks) { 
    taskItems.Add(new TasksModel(task.Id, task.Name, false)); 
} 

var viewModel = new CreateScheduleViewModel { 
     Patients = patients, 
     Employees = employees, 
     PatientId = 0, 
     EmployeeId = 0, 
     Tasks = taskItems, 
}; 

return View(viewModel); 
+0

你可以顯示你的'TasksModel'中的一部分,你有'IsChecked' –

+3

你已經找到了MVC的HTML幫助器的限制。他們不知道如何爲'x.Tasks.ElementAt(i)'生成標記。現在該學習模型綁定的工作原理了。在Google上查找「MVC中的模型綁定集合」。 –

+0

謝謝,現在就開始工作吧。 –

回答

0

我檢查你的代碼。爲複選框標籤生成的名稱標籤負責模型綁定。稍微改動一下,你的代碼就可以正常工作。

只要改變你的「for」循環鑑於這裏提到---

@for (var i = 0; i < Model.Tasks.Count; i++) // Not @Model.Tasks.Count 
    { 
     <li> 
      @Html.HiddenFor(x => x.Tasks[i].Id) // Note 
      @Html.CheckBoxFor(x => x.Tasks[i].IsChecked) // Note 
      @Model.Tasks.ElementAt(i).Name 
     </li> 
    } 

預期模型包括在視圖(「CreateScheduleViewModel」)。運行你的代碼。它工作正常!

相關問題