Zapisywanie danych relacji wielu do wielu w widoku MVC Utwórz

Mam pewne problemy z relacją Wiele do wielu, które zapisują wyniki widoku tworzenia.

Chcę utworzyć stronę tworzenia nowego profilu użytkownika, który ma listę kontrolną, która pozwala im wybrać kursy (wiele do wielu relacji). Mój widok pobiera rekordy zCourses baza danych i pokazuje je wszystkie z polami wyboru.

Gdy użytkownik opublikuje dane, chcę zaktualizować mojeuserprofile model, a takżecourses relacja wiele-do-wielu. To jest kod, którego mi brakuje!

Jestem nowy w MVC i prowadziłem badania, ale nie mogłem jeszcze tego zrobić.

Podążam za tym przykładem:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/updating-related-data-with-the-entity-framework-in-an-asp-net-mvc- podanie

To jest model:

public class UserProfile
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Courses>  usercourses { get; set; }
}

public class Courses
{
    public int CourseID { get; set; }
    public string CourseDescripcion { get; set; }
    public virtual ICollection<UserProfile> UserProfiles { get; set; }
}

public class UserProfileDBContext : DbContext
{
    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Courses> usrCourses{ get; set; }
}

Dodałem także ViewModel:

namespace Mysolution.ViewModels
{
    public class AssignedCourseData
    {
        public int CourseID { get; set; }
        public string CourseDescription { get; set; }
        public bool Assigned { get; set; }
    }
}

To jestcreate Kontroler wypełniający pola wyboru kursów:

public ActionResult Create()
{
    PopulateCoursesData();
    return View();
}

private void PopulateCoursesData()
{
    var CoursesData = db.usrCourses;
    var viewModel = new List<AssignedCourseData>();
    foreach (var item in CoursesData)
    {
        viewModel.Add(new AssignedCourseData {
            CourseID = item.CourseID,
            CourseDescription  = item.CourseDescription,
            Assigned = false });
    }
    ViewBag.CoursePopulate = viewModel;
}

To jest widok

@{
    int cnt = 0;
    List<MySolution.ViewModels.AssignedCourseData> courses = ViewBag.CoursePopulate;

    foreach (var course in courses)
    {
        <input type="checkbox" name="selectedCourse" value="@course.CourseID" /> 
        @course.CourseDescription
    }
}

I to jest kontroler, który pobiera dane (i gdzie chcę je zapisać). Robi się jako parametrstring[] selectedCourse dla pól wyboru:

[HttpPost]
public ActionResult Create(UserProfile userprofile, string[] selectedCourse)
{
    if (ModelState.IsValid)
    {
        db.UserProfiles.Add(userprofile);

        //TO DO: Save data from many to many (this is what I can't do!)

        db.SaveChanges();
    }

    return View(userprofile);
}

questionAnswers(1)

yourAnswerToTheQuestion