将一组模型和一个不同的模型传递到同一视图上的帖子

时间:2016-11-09 14:59:36

标签: asp.net asp.net-mvc entity-framework

我正在使用MVC开发Contoso大学示例,我的一个项目是学习如何在帖子中发送模型集合。  我在线增长示例而不是获取值并将其添加到集合中,我想要获取两个值并将该对象(模型)添加到集合中以实现一对多关系。 在视图中,当您点击它时,我添加了两个带+的框,它会再添加两个框,允许用户拥有与他一样多的课程名称/课程编号对她选择了。 请注意,在创建教师帖子时,该方法采用InstructorselectedCourses数组(只是复选框)。

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Create([Bind(Include = "LastName,FirstMidName,HireDate,OfficeAssignment")]Instructor instructor, string[] selectedCourses)
        {
            if (selectedCourses != null)
            {
                instructor.Courses = new List<Course>();
                foreach (var course in selectedCourses)
                {
                    var courseToAdd = db.Courses.Find(int.Parse(course));
                    instructor.Courses.Add(courseToAdd);
                }
            }
            if (ModelState.IsValid)
            {
                db.Instructors.Add(instructor);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            PopulateAssignedCourseData(instructor);
            return View(instructor);
        }

我对如何正确地做这件事感到茫然。我的想法是说......

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Create([Bind(Include = "LastName,FirstMidName,HireDate,OfficeAssignment")]Instructor instructor, string[] selectedCoursesNames string[] selectedCoursesNumbers )
        {
            if (selectedCourses != null)
            {
                instructor.Courses = new List<Course>();
                foreach (var course in selectedCoursesNames)
                {
                    instructor.Courses.Add(new courseToAdd()
                    {
                        name = selectedCoursNames[course],
                        number = selectedCoursNumbers[course]
                    });
                    }
                }
                if (ModelState.IsValid)
                {
                    db.Instructors.Add(instructor);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                PopulateAssignedCourseData(instructor);
                return View(instructor);
            }

显然这不是最好的方法,更好的解决方案是发布一个对象数组,然后运行一个循环,将每个对象添加到教师。

我有两个问题,我不知道如何发布模型列表以及我的视图中的模型如何知道该部分将在该部分中发布模型数组并使该部分成为一个部分一系列型号?它需要是局部视图吗?这两种模式我最能用这种方法吗?我似乎无法在网上找到很多这方面的资源,这让我暂停了几天。

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/这篇文章对我想要做的事情做了不错的参考,但是他们对索引进行了硬编码,而且没有保持动态长度......我想我可以创建一个JavaScript代码在按下+符号时递增它,但它似乎仍然没有。这仍然无法解决如何使用相同的方法同时发布两个模型的问题。

我知道使用viewModel在视图中放置多个可枚举模型的方法,但我不明白如何在一个表单中绑定两个不同的模型。

1 个答案:

答案 0 :(得分:0)

只需制作一个ViewModel。

public class Instructor{
      public string LastName;
      public string FirstMidName;
      public DateTime HireDate;
      public string OfficeAssignment;
      public List<Course> course;
}

public class Course{
      public string name;
      public int number;
}

然后

public ActionResult Create(Instructor instructor){}

所以你只需要在ajax函数中创建一个Instructor对象