0

我想使用剃刀语法在视图中显示一个复选框。模型属性 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 保存到数据库中,如果未选中,则应保存 0。

请帮助我...谢谢..

4

2 回答 2

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...
}

编辑

这是一个非常质朴的答案,我相信你可以做得更好。

为此,我们需要更多信息:

您使用的是实体框架(版本)吗?

如果是,代码优先,数据库优先,模型优先?

哪个数据库落后?

你能改变数据库的东西吗?

IsActive 在数据库中有什么类型?

于 2013-01-25T07:54:10.207 回答
0

IsActive应该是布尔值,@Html.CheckBoxFor()辅助方法需要布尔参数

将代码更改为

public bool IsActive { get; set; } 
于 2013-01-25T07:54:06.670 回答