.net 复选框未正确绑定

.net 复选框未正确绑定,.net,asp.net-mvc,checkbox,model-binding,.net,Asp.net Mvc,Checkbox,Model Binding,我的程序有以下问题: 我有一个用户类,它包含一系列你可以学习的课程。这些课程有一系列的训练日。我从MySQL数据库获取所有值。我正在绑定我的用户类。所有内容都是正确的模型绑定,但当我提交所选的训练日时,它不会将值更改为true 更新: 切换到viewmodels后,它会在单击submit时发回一个空的viewmodel 课程: public partial class User { /*insert User Properties*/ public virtual

我的程序有以下问题: 我有一个用户类,它包含一系列你可以学习的课程。这些课程有一系列的训练日。我从MySQL数据库获取所有值。我正在绑定我的用户类。所有内容都是正确的模型绑定,但当我提交所选的训练日时,它不会将值更改为true

更新: 切换到viewmodels后,它会在单击submit时发回一个空的viewmodel

课程:

public partial class User
{       
    /*insert User Properties*/
    public virtual ICollection<Course> Courses { get; set; }
    /*methods*/
}

public partial class Course
{
/*insert Course Properties*/
public virtual ICollection<Trainingday> Trainingdays{ get; set; }
public IEnumerable<Trainingday> GetTrainingdays()
    {
        IEnumerable<Trainingday> listDays = (from l in Trainingdays
                                                   where l.IsSelected
                                                   select l);
        return listDays;
    }
}

public partial class Trainingday
{
    public int Id { get; set; }
    public bool IsSelected { get; set; }
    public DateTime Date { get; set; }
}
控制器:

private CourseViewModel model;
public ActionResult Course(User user, string code)
{
    Course course = user.GetCourse(code); /*retrieves the course for specified code*/
    model = new CourseViewModel();
    model.Date = course.Date;
    model.Title = course.Title;
    model.Description = course.Description;
    model.Trainingdays = course.Trainingdays;
    return View("Course", model);
}

[HttpPost]
public ActionResult Trainingdays(CourseViewModel courseModel)
{
    IEnumerable<Trainingday> trainingdays = courseModel.GetTrainingdays();
    return View("Trainingdays", trainingdays);
}
[HttpPost]
public ActionResult Trainingdays(Course course)
{
  /*Do Stuff here*/
  return View("Trainingdays", trainingdays);
}
视图模型:

public class CourseViewModel
{
    [Display(Name = "Title")]
    public string Title { get; set; }
    [Display(Name = "Description")]
    public string Description { get; set; }
    [DataType(DataType.Date)]
    [Display(Name = "Date")]
    public DateTime? Date { get; set; }
    public virtual ICollection<Trainingday> Trainingdays{get;set;}
    public IEnumerable<Trainingday> GetTrainingdays()
    {
        IEnumerable<Trainingday> listDays = (from l in Trainingdays
                                                 where l.IsSelected
                                                 select l);
        return listDays;
    }
}
视图:

单击“提交”时,我的所有值与以前相同。 我研究这个问题已经有一段时间了,而我从其他人那里找到的解决方案似乎没有什么帮助

您的视图强类型为@model Models.Domain.Course,但您的POST方法需要用户。默认的模型绑定器基于每个HTML助手从模型中创建视图中的每个输入或任何其他HTML元素的类型,在服务器中重新构建整个模型

您发布的课程不是用户,因此请更改控制器:

private CourseViewModel model;
public ActionResult Course(User user, string code)
{
    Course course = user.GetCourse(code); /*retrieves the course for specified code*/
    model = new CourseViewModel();
    model.Date = course.Date;
    model.Title = course.Title;
    model.Description = course.Description;
    model.Trainingdays = course.Trainingdays;
    return View("Course", model);
}

[HttpPost]
public ActionResult Trainingdays(CourseViewModel courseModel)
{
    IEnumerable<Trainingday> trainingdays = courseModel.GetTrainingdays();
    return View("Trainingdays", trainingdays);
}
[HttpPost]
public ActionResult Trainingdays(Course course)
{
  /*Do Stuff here*/
  return View("Trainingdays", trainingdays);
}
如果需要显示或发布任何其他属性,则应创建ViewModel来封装这些属性,例如:

 public class CourseViewModel
 {
    public string Code { get; set; }
    public Course course { get; set; }
    /*Other stuff*/
 }
然后在视图中使用它:

并将其作为动作参数接收:

[HttpPost]
public ActionResult DoStuffWithCourse(CourseViewModel course)
{
  /*Do Stuff here*/
}

这样,默认的模型活页夹将为您完成繁重的工作

问题是您的视图模型是一门课程,而您的Trainingdays方法需要一个用户?“模型绑定器根据命名约定将值绑定到属性,我怀疑它是否会使用正确的命名约定。@Stengel能否向我们展示提交值的代码??您必须调用context.SaveChanges是否确实提交了正确的值?我没有上下文。SaveChanges。。。我也没有背景。我需要在该控制器中创建什么上下文?我在UserRepository中有一个方法SaveChanges,那么我需要创建UserContext吗?您希望在TrainingDays中选择一个IsSelected,而view有多个字段。日期字段也是如此。您可以为每个循环创建表单,也可以更改属性以容纳多个类型。使用List SelectedDS如果我这样做,我的课程就没有任何价值了。标题、描述和培训日期都是空的。然后你应该更好地解释你需要发布什么。viewmodel一直工作到我按下submit。它将一个空的viewmodel发送回我的控制器。我希望Trainingdays操作结果选择我选择的培训日期。如果我没有很好地解释问题,我真的很抱歉,我还在学习。当我让这个viewmodel开始工作时,我会告诉你的。我似乎也有一些困难。。。我的viewmodel没有被值填充。将其与EditorTemplate结合使用似乎有效。虽然一些没有使用编辑器的值是空的,但我以后不需要它们,所以一切正常。谢谢你的帮助!