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; }
}
如果您需要更多信息或代码,请告诉我们。 任何帮助将不胜感激,谢谢
答案 0 :(得分:2)
好的,首先使用bit
和/或bool
属性。默认值是要走的路,或者至少不允许空值这样,您将始终具有true或false的值。由于bit/bool
只包含0
或1
(false或true),因此您不应该允许空值,因为它会考虑bit/bool
3个值。< / p>
然后,一旦设置了默认值,而不是使用@Html.CheckBox
..使用@Html.CheckBoxFor
这种方式,属性会在视图中强烈键入模型。此外,在我看来,它看起来更清洁,更容易维护。
@Html.CheckBoxFor(model => model.UserStatus)
此外,一旦设置了默认值,您就不必担心Convert.ToBoolean
。
快乐的编码!