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