.net 复选框未正确绑定
我的程序有以下问题: 我有一个用户类,它包含一系列你可以学习的课程。这些课程有一系列的训练日。我从MySQL数据库获取所有值。我正在绑定我的用户类。所有内容都是正确的模型绑定,但当我提交所选的训练日时,它不会将值更改为true 更新: 切换到viewmodels后,它会在单击submit时发回一个空的viewmodel 课程:.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
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结合使用似乎有效。虽然一些没有使用编辑器的值是空的,但我以后不需要它们,所以一切正常。谢谢你的帮助!