CheckBox基于从数据库传递的值来设置

时间:2017-10-26 15:01:05

标签: asp.net-mvc razor

MVC Razor格式的新功能,并且有点难以理解为什么我得到了我在下面列出的结果。我的目标是检查并取消选中我视图中的复选框。提交页面时,它会将值发送到控制器并根据检查的内容更新数据库。它用于激活和停用用户。

真正简单我想要的是保存True的值(框检查)/ False(框未选中)。

这是一个有效的,但是当我重新访问该页面时,我无法保持检查状态。

@Html.CheckBox("UserStatus", false) <i>(check to deactivate)</i><br/>

这个我得到一个错误:

  

模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式*

@if (Convert.ToBoolean(Model.UserStatus == true))
{
    @Html.CheckBoxFor(model => Convert.ToBoolean(model.UserStatus), new { @checked = "checked" })
}
else
{
    @Html.CheckBoxFor(model => Convert.ToBoolean(model.UserStatus), false)
}

如果在数据库中从未出现过,那么它将始终返回false

<input id="UserStatus" name="UserStatus" @Html.Raw((Convert.ToBoolean(Model.UserStatus) == true ?  "checked='checked' value='true'" : "checkbox='' value='false'")) type="checkbox" />

这是控制器

// GET: Employee/Delete/5
public ActionResult Delete(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    TEmployee User = db.TEmployees.Find(id);
    if (User == null)
    {
        return HttpNotFound();
    }

    return View(User);
}//End of Delete GET

这是模型类

public partial class TEmployee
{
    public int userID { get; set; }
    public string userName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UserPassword { get; set; }
    public string EmailId { get; set; }
    public string PhoneNumber { get; set; }
    public Nullable<bool> UserStatus { get; set; }
}

如果您需要更多信息或代码,请告诉我们。 任何帮助将不胜感激,谢谢

1 个答案:

答案 0 :(得分:2)

好的,首先使用bit和/或bool属性。默认值是要走的路,或者至少不允许空值这样,您将始终具有true或false的值。由于bit/bool只包含01(false或true),因此您不应该允许空值,因为它会考虑bit/bool 3个值。< / p>

然后,一旦设置了默认值,而不是使用@Html.CheckBox ..使用@Html.CheckBoxFor这种方式,属性会在视图中强烈键入模型。此外,在我看来,它看起来更清洁,更容易维护。

@Html.CheckBoxFor(model => model.UserStatus)

此外,一旦设置了默认值,您就不必担心Convert.ToBoolean

快乐的编码!