2016-12-05 11 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

あなたが 'IsChecked'を持っている' TasksModel'から部品を表示できます –

+3

MVCのHTMLヘルパーの制限を発見しました。彼らは 'x.Tasks.ElementAt(i)'のマークアップを生成する方法を知らない。モデルバインディングがどのように機能するかを学ぶべき時です。 GoogleのMVCでモデルバインディングコレクションを探します。 –

+0

ありがとうございました、今すぐ使えるようになりました。 –

答えて

0

。チェックボックスタグ用に生成されたネームタグは、モデルバインディングを担当します。ちょっと変わって、コードが正常に動作します。ここに述べたように、あなたのモデルがビュー内の(「CreateScheduleViewModel」)を含まれていることを

だけ

@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> 
    } 

ことが期待されている---ビューであなたの「のための」ループを変更します。コードを実行します。それはうまく動作します!

関連する問題