ASP.Net - добавление нового объекта, который содержит другие объекты, но содержащиеся объекты становятся нулевыми

Я пытаюсь добавить объект курса в свою базу данных, и в моей форме у меня есть еще 3 объекта, которые могут содержаться в объекте Course. В моей форме другие 3 объекта показывают, но когда они возвращаются к контроллеру, значения 3 объекта равны нулю.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Почему значения Teacher, Student, GradedWork возвращаются как null?

Мой контроллер создает методы

public ActionResult Create()
 {
 var addForm = new CourseAddForm();

 addForm.Teachers = m.GetAllTeachersAsList();
 addForm.Students = m.GetAllStudentsAsList();
 addForm.GradedWorks = m.GetAllGradedWorkAsList();

 return View(addForm);
 }

 //
 // POST: /Course/Create
 [HttpPost]
 public ActionResult Create(CourseAdd newItem)
 {
 if (ModelState.IsValid)
 {

 var addedItem = m.AddCourse(newItem);

 if (addedItem == null)
 {
 return RedirectToAction("Index");
 }

 else
 {
 return RedirectToAction("Details", new { id = addedItem.Id });
 }


 }

 else
 {
 var addForm = Mapper.Map<courseaddform>(newItem);

 addForm.Teachers = m.GetAllTeachersAsList();
 addForm.Students = m.GetAllStudentsAsList();
 addForm.GradedWorks = m.GetAllGradedWorkAsList();

 return View(addForm);
 }
 }
</courseaddform>

Мои модели просмотра

public class CourseAddForm : CourseAdd
{

 [Display(Name = "Teacher")]
 public ICollection<teacherlist> Teachers { get; set; }

 [Display(Name = "Student")]
 public ICollection<studentlist> Students { get; set; }

 [Display(Name = "Graded Works")]
 public ICollection<gradedworklist> GradedWorks { get; set; }

 public CourseAddForm()
 {
 this.Teachers = new List<teacherlist>();
 this.Students = new List<studentlist>();
 this.GradedWorks = new List<gradedworklist>();

 }



}

public class CourseAdd
{

 //[Key]
 [Display(Name = "Course Code")]
 public int CourseCode { get; set; }

 // [Required]
 [Display(Name = "Name")]
 public string Name { get; set; }

 // [Required]
 [Display(Name = "Semester")]
 public string Semester { get; set; }

 // [Required]
 [Display(Name = "Section Id")]
 public string SectionId { get; set; }

 [Display(Name = "Teacher")]
 public ICollection<teacherlist> Teachers { get; set; }

 [Display(Name = "Student")]
 public ICollection<studentlist> Students { get; set; }

 [Display(Name = "Graded Works")]
 public ICollection<gradedworklist> GradedWorks { get; set; }

}


public class CourseBase : CourseAdd
{
 [Key]
 public int Id { get; set; }

}


public class CourseBaseAddOn
{
 [Key]
 public int Id { get; set; }

 //[Key]
 [Display(Name = "Course Code")]
 public int CourseCode { get; set; }

 // [Required]
 [Display(Name = "Name")]
 public string Name { get; set; }

 // [Required]
 [Display(Name = "Semester")]
 public string Semester { get; set; }

 // [Required]
 [Display(Name = "Section Id")]
 public string SectionId { get; set; }

 [Display(Name = "Teacher")]
 public ICollection<teacherlist> Teachers { get; set; }

 [Display(Name = "Student")]
 public ICollection<studentlist> Students { get; set; }

 [Display(Name = "Graded Works")]
 public ICollection<gradedworklist> GradedWorks { get; set; }

}
</gradedworklist></studentlist></teacherlist></gradedworklist></studentlist></teacherlist></gradedworklist></studentlist></teacherlist></gradedworklist></studentlist></teacherlist>

Мой метод менеджера

public CourseBaseAddOn AddCourse(CourseAdd newItem)
 {

 Course course = Mapper.Map<course>(newItem);

 ds.Courses.Add(course);
 ds.SaveChanges();

 return Mapper.Map<coursebaseaddon>(course);

 }
</coursebaseaddon></course>

Моя форма

! (http://imgur.com/XkWRtES)

2 ответа

Я забыл атрибут name = "" в моей форме представления, с тем, что мне удалось найти идентификатор, а затем назначить объект, где id == Id вручную


когда вы заполняете свои коллекции и отправляете на просмотр, просмотр показывает данные, и все данные при отправке клиенту будут уничтожены. Поэтому вы должны создать элемент, который хранит ваши данные для отправки на сервер при отправке формы.

licensed under cc by-sa 3.0 with attribution.