复选框在mvc4中使用Razor语法

时间:2013-01-25 07:51:03

标签: asp.net-mvc-3 razor asp.net-mvc-4

我想使用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应该保存。

请帮帮我... 感谢..

2 个答案:

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