我想使用razor语法在视图中显示一个复选框。 模型属性IsActive应该是int。 型号是: -
public class Student
{
public int StudentID { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public int IsActive { get; set; }
}
查看是: -
<div class="editor-label">
@Html.LabelFor(model => model.IsActive)
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.IsActive)
@Html.ValidationMessageFor(model => model.IsActive)
</div>
我应该显示复选框,如果选中复选框,1应该保存到数据库中,如果umchecked 0应该保存。
请帮帮我... 感谢..
答案 0 :(得分:3)
您在错误消息中没有理解什么?您不能将CheckBoxFor用于int属性。
您应该更改模型并设置
public bool IsActive {get;set;}
现在,它可能是一个很好的理由成为一个int,但很难说为什么你的代码......
如果IsActive只能是0或1,您应该使用ViewModel类,并使用布尔属性,您将映射到您的类。
public class StudentViewModel
{
public int StudentID { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
}
然后当你从你的数据库中获取你的学生时(在你的“GET”行动中)
类似的东西(乡村)
public ActionResult StudentEdit(int id) {
var student = getStudentById(id);
var model = new StudentViewModel {
StudentId = student.StudentID,
Code = student.Code,
Description = student.Description,
IsActive = student.IsActive == 1
};
return View(model);
}
您的观点应使用StudentViewModel
输入@model StudentViewModel
然后在你的POST动作中,反向
[HttpPost]
public ActionResult StudentEdit(StudentViewModel model) {
var student = getStudentById(model.StudentID);
student.Code = model.Code;
student.Description = model.Description;
student.IsActive = model.IsActive ? 1 : 0;
UpdateStudent(student);
return Redirect...
}
编辑:
这是一个非常质朴的答案,我相信你可以做得更好。
为此,我们需要更多信息:
您使用的是Entity Framework(版本)吗?
如果是,则代码优先,数据库优先,先建模?
背后是哪个数据库?
你能改变一下数据库吗?
数据库中有哪种类型的IsActive?
答案 1 :(得分:0)
IsActive
应该是一个bool,@Html.CheckBoxFor()
辅助方法需要布尔参数
将代码更改为
public bool IsActive { get; set; }