Guardar muchos a muchos datos de relaciones en MVC Crear vista

Tengo algunos problemas con una relación de muchos a muchos que guarda los resultados de una vista de creación.

Quiero hacer una página de creación para un nuevo perfil de usuario que tenga una lista de verificación que les permita elegir cursos (relación de muchos a muchos). Mi vista toma los registros de laCourses Base de datos y los muestra todos con casillas de verificación.

Una vez que el usuario publica los datos, quiero actualizar miuserprofile modelo, y también elcourses Relación de muchos a muchos. Ese es el código que me falta!

Soy nuevo en MVC y he estado investigando, pero no pude hacerlo todavía.

Estoy siguiendo este ejemplo:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/updating-related-data-with-the-entity-framework-in-an-asp-net-mvc- solicitud

Este es el modelo:

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; }
}

También agregué un ViewModel:

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

Este es elcreate Controlador que llena las casillas de verificación de los cursos:

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;
}

Esta es la vista

@{
    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
    }
}

Y este es el controlador que obtiene los datos (y dónde quiero guardarlos). Se pone como parámetrostring[] selectedCourse para las casillas de verificación:

[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);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta