1
특정 배치에 등록한 학생을위한 출석 패널을 만들고 있습니다. 이를 위해 나는 해당 배치에 할당 된 클래스 수에 따라 확인란의 수와 함께 학생들의 기록을 표시합니다. 모든 것이 올바르게 표시되지만 한 행만의 확인란은 값을 게시물에 전달하고 다른 행의 나머지 확인란은 게시되지 않습니다. 각 행에 대한 학생 세부 정보가 목록에 수정 게시 중입니다. 다음은 CheckBox 목록 항목이 mvc에 게시되지 않음 5
내 코드입니다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>
}
중복 된'name' 속성 (중복 된'id' 속성은 잘못된 html 임)으로 중복 체크 박스를 만드는 것입니다. DefaultModelBinder는 첫 번째로 일치하는 이름 만 바인딩합니다. 당신이 달성하기를 원하는 것이 명확하지 않습니다. 각'User'는'Days' 컬렉션을 가져야합니까? (이 경우 모델이 잘못됨) –
예, 각 사용자에게는 일의 컬렉션이 있습니다. – user100020
그러면 요일에 대한 컬렉션 속성이 포함 된 사용자 (학생?)에 대한보기 모델이 필요하며 중첩 된 'for'루프를 사용합니다. –