Ich mache eine Teilnahme-Panel für die Schüler, die in der jeweiligen Charge eingeschrieben sind. Dafür zeige ich die Aufzeichnungen der Schüler zusammen mit der Anzahl der Checkboxen entsprechend der Anzahl der Klassen an, die für diese Charge zugewiesen wurden. Alles wird korrekt angezeigt, aber die Kontrollkästchen nur einer Zeile enthalten Werte für den Post, und die restlichen Kontrollkästchen in anderen Zeilen werden nicht gepostet. Die Studentendetails für jede Zeile werden in einer Liste korrigiert.CheckBox Liste Artikel nicht in MVC 5
Unten ist mein Code
StudentAttendance.cs
public class StudentAttendance
{
public List<Models.User> userlist { get; set; }
public List<Models.Days> days { get; set; }
}
InstructorController.cs
public ActionResult AssignedStudents(string id)
{
Models.StudentAttendance viewmodel = new Models.StudentAttendance();
//viewmodel.studentbatch = new Models.StudentBatch();
//viewmodel.user = new Models.User();
Context.Instructor instructor = new Context.Instructor();
viewmodel.userlist = new List<Models.User>();
viewmodel.days = new List<Models.Days>();
viewmodel.userlist = instructor.lstAssignedStudents(id);
Context.Batches contBatch = new Context.Batches();
var days = contBatch.SelectDays(id);
int totaldays = contBatch.CalculateDays(days);
var duration = contBatch.GetallBatchList().Where(p => p.Id == id);
var batchduration = (from c in duration where c.Id == id select c.Duration).ToList();
string d = batchduration[0].ToString();
int totalduration = contBatch.GetBatchDuration(d);
int TotalCheckBoxes = totalduration * totaldays;
List<string> getdays = contBatch.getdaysinList(days, totalduration);
List<Models.Days> day = new List<Models.Days>();
for (int i = 0; i < TotalCheckBoxes; i++)
{
day.Add(new Models.Days { dayid = i, dayname = getdays[i], ischecked = false });
}
viewmodel.days = day;
return View(viewmodel);
}
[HttpPost]
public ActionResult MarkAttendance(Models.StudentAttendance viewmodel)
{
Models.StudentAttendance viewmodel1 = new Models.StudentAttendance();
//viewmodel.studentbatch = new Models.StudentBatch();
//viewmodel.user = new Models.User();
return View();
}
AssignedStudents.cshtml
@model WebApplication1.Models.StudentAttendance
@{
ViewBag.Title = "AssignedStudents";
}
<h2>AssignedStudents</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("MarkAttendance","Instructor", FormMethod.Post))
{
<table class="table">
<tr>
<th>@Html.DisplayName("First Name")</th>
<th>@Html.DisplayName("Last Name")</th>
</tr>
@for (int j = 0; j < Model.userlist.Count; j++)
{
<tr>
<td>@Html.HiddenFor(m=>Model.userlist[j].Id)</td>
<td>@Html.EditorFor(m => Model.userlist[j].FirstName)</td>
<td>@Html.EditorFor(m => Model.userlist[j].LastName)</td>
@for (int i = 0; i < Model.days.Count; i++)
{
<td>
@Html.CheckBoxFor(m => Model.days[i].ischecked)
@Model.days[i].dayname
@Html.HiddenFor(m => Model.days[i].dayid)
@Html.HiddenFor(m => m.days[i].dayname)
</td>
}
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" id="Attendance" value="Create" class="btn btn-default" />
</div>
</div>
}
Sie erstellen nur doppelte Checkboxen, mit doppelten 'name' Attributen (und doppelte' id' Attribute, die in HTML ungültig sind). Der 'DefaultModelBinder' bindet nur den ersten passenden Namen. Es ist nicht klar, was Sie erreichen möchten. Sollte jeder "Benutzer" eine Sammlung von "Days" haben? (In diesem Fall ist Ihr Modell falsch) –
Ja, jeder Benutzer hat eine Sammlung von Tagen. – user100020
Dann brauchen Sie ein View-Modell für einen Benutzer (Student?), Der eine Collection-Eigenschaft für die Tage enthält und dann verschachtelte 'for'-Loops verwendet –