c# - 复选框的列表或选择列表
问题描述
我需要想办法为我的数据库中的多个属性的复选框创建一个列表或选择列表。
该模型具有 UrgentNeedsFood、UrgentNeedsMedication、UrgentNeedsOther 作为单独的属性,我需要为每个要显示的属性创建复选框。因此,如果用户单击一个或所有复选框,则相应复选框的值将保存到数据库中的每个单独属性中。
我想使用 List 或 SelectList 来进行模型绑定并从/向数据库获取/设置值。如果没有 ViewModel 来表示属性,我该怎么做呢?
这是模型:
这就是我在控制器中尝试做的事情:
SelectListItem list = new SelectListItem();
list = new SelectListItem { Text = "Medication", Value = "True", Selected = false };
list = new SelectListItem { Text = "Food", Value = "True", Selected = false };
list = new SelectListItem { Text = "Life/Health/Safety", Value = "True", Selected = false };
list = new SelectListItem { Text = "Other", Value = "True", Selected = false };
ViewBag.UrgentNeeds = list;
尝试上面的代码时,我在我的视图中使用它:
@foreach (SelectListItem item in ViewBag.UrgentNeeds)
{
if (item.Text == "Medication"){<input type="checkbox" name="Urgent_Needs_Medication" /> }
if (item.Text == "Food"){ <input type="checkbox" name="Urgent_Needs_Food" /> }
if (item.Text == "Life/Health/Safety"){ <input type="checkbox" name="Urgent_Needs_Life_Health_Safety" /> }
if (item.Text == "Other"){ <input type="checkbox" name="Urgent_Needs_Other" /> }
break;
}
但我得到这个错误:
Cannot implicitly convert type 'System.Web.Mvc.SelectListItem' to 'System.Collections.IEnumerable'. An explicit conversion exists (are you missing a cast?)
当我不尝试上面的代码时,我会从数据库中返回这个视图:
这是视图的代码:
<div class="col-md-9">
<div class="row">
<div class="col-md-4">
<input type="checkbox" name="Urgent_Needs_Medication" value="true" /> @Html.LabelFor(model => model.Urgent_Needs_Medication, new { @class = "control-label" })
</div>
<div class="col-md-4">
<input type="checkbox" name="Urgent_Needs_Life_Health_Safety" value="true" /> @Html.LabelFor(model => model.Urgent_Needs_Life_Health_Safety, new { @class = "control-label" })
</div>
</div>
<div class="row">
<div class="col-md-4">
<input type="checkbox" name="Urgent_Needs_Food" value="true" /> @Html.LabelFor(model => model.Urgent_Needs_Food, new { @class = "control-label" })
</div>
<div class="col-md-4">
<input type="checkbox" name="Urgent_Needs_Other" value="true" /> @Html.LabelFor(model => model.Urgent_Needs_Other, new { @class = "control-label" })
</div>
</div>
</div>
正如您所看到的,没有一个复选框被选中,我知道它们应该被选中,但我不知道如何让控制器检查选中的属性。
有没有人对如何从数据库中获取值并在控制器中分配检查值有所了解?
这作为一个下拉列表很简单,但我需要使用复选框。
- 更新 -
我看到数据库中的数据类型是bit
. EF 的数据类型为Nullable<bool>
. 他们确实互相交谈,但我不确定这是否会有所作为。
解决方案
尝试像这样更新您的代码
@foreach (SelectListItem item in (IEnumerable<SelectListItem>)ViewBag.UrgentNeeds)
推荐阅读
- mysql - SQL 错误 1452 和自动增量问题
- python - 如何使用 SpaCy Matcher(或 PhraseMatcher)类来提取 2 个项目的序列?
- conda - 将要求添加到“运行”或“主机”失败 conda-build
- docker - docker 容器同时关闭,重新启动失败,错误为将 max 写入 pids.max,我该如何找到问题?
- node.js - 在 nodejs 中,如何在事务中使用 async/await 而不是通过“then”来解析承诺?
- django - 在单个谷歌云应用引擎实例上部署 DjangoREST+React 项目。可能吗?
- javascript - 将图像上传到 Firebase 时 Nativescript ProgressBar 未更新(仅在 100% 后更新)
- http - 通过 HTTP 请求关注 Azure acklog 项
- python - Pandas:如果某列连续出现少于 n 次,则将 True 设置为 False
- android - 设置 shell 脚本 Android SELinux 策略以在系统启动时启动它已完成