2017-12-21 5 views
0

Ich habe eine Liste von Checkboxen für jede Zeile, um die Anwesenheit der Studenten zu markieren. Ich habe es geschafft, Werte der Checkboxen in die Datenbank einzufügen. Allerdings, wenn ich versuche, diese Werte zu bearbeiten, aus der Datenbank abgerufen; Für jede Zeile werden Checkboxen ähnlicher IDs geprüft. Obwohl ich Checkboxen entsprechend den Indexwerten markiere, wurde kein Unterschied gemacht.Wert der Checkboxen in mvc abrufen 5

User.cs

public string FirstName { get; set; } 
public string LastName { get; set; } 
public List<Models.Days> days { get;set;} 

StudentAttendanceVM.cs

public Models.User user { get; set; } 
public Models.StudentBatch studentbatch { get; set; } 

Days.cs

public class Days 
{ 
    public string dayid { get; set; } 
    public string dayname { get; set; } 
    public bool ischecked { get; set; } 
} 

Controller.cs

List<Models.Days> day = new List<Models.Days>(); 
for (int i = 0; i < TotalCheckBoxes; i++) 
{ 
    day.Add(new Models.Days { dayid = Guid.NewGuid().ToString(), dayname = getdays[i], ischecked = false }); 
} 

List<Models.StudentAttendance> studentattendance = new List<Models.StudentAttendance>(); 

foreach (Models.User lst in users) 
{ 
    studentattendance.Add(new Models.StudentAttendance { studentbatch = new Models.StudentBatch { batchId = id }, user = new Models.User { Id= lst.Id, FirstName = lst.FirstName, LastName = lst.LastName, days = day}}); 
} 

List<string> attendance = contStudent.GetAttendance(id) // here I'm fetching result from database 

if (attendance.Count > 0) 
{ 
    string status = ""; 
    string status1 = ""; 

    for (int k = 0; k < attendance.Count; k++) 
    { 
     status = attendance[k].ToString(); 
     for (int i = 0; i < status.Length; i++) 
     { 
      status1 = status[i].ToString(); 
      if (status1 == "1") 
      { 
       studentattendance[k].user.days[i].ischecked = true; // here I'm trying to check the checkbox of particular index, but each item of the same index in studentattendance list gets checked. 
      } 
     } 
    } 
} 

Antwort

1

Sie die Variable day Erzeugung

List<Models.Days> day = new List<Models.Days>(); 

und anschließend diese Instanz Zuweisen (ein Referenztyp) zu jedem User.

Es gibt nur eine Instanz von day, so dass jede Änderung, die Sie daran vornehmen, sich in jedem User Modell widerspiegelt.

Sie müssen eine separate Instanz von List<Days> für jede User erstellen.

foreach (Models.User lst in users) 
{ 
    // Move the code for initializing the collection of Days here 
    List<Models.Days> day = new List<Models.Days>(); 
    for (int i = 0; i < TotalCheckBoxes; i++) 
    { 
     day.Add(new Models.Days { dayid = Guid.NewGuid().ToString(), dayname = getdays[i], ischecked = false }); 
    } 
    studentattendance.Add(new Models.StudentAttendance 
    { 
     studentbatch = new Models.StudentBatch 
     { 
      batchId = id 
     }, 
     user = new Models.User 
     { 
      Id= lst.Id, 
      FirstName = lst.FirstName, 
      LastName = lst.LastName, 
      days = day 
     } 
    }); 
} 
+0

So soll ich separate Instanz Liste Looping von Benutzern machen und innerhalb dass ich hinzufügen, Werte zu Tagen sowie in studentattendance Liste? – user100020

+0

Ja, lass mich die Antwort bearbeiten, um den Code –

+0

zu zeigen Ich habe schon deinen ersten Kommentar erraten :) – user100020