首页 > 解决方案 > 复选框的列表或选择列表

问题描述

我需要想办法为我的数据库中的多个属性的复选框创建一个列表或选择列表。

该模型具有 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>. 他们确实互相交谈,但我不确定这是否会有所作为。

标签: c#asp.net-mvc-5

解决方案


尝试像这样更新您的代码

@foreach (SelectListItem item in (IEnumerable<SelectListItem>)ViewBag.UrgentNeeds)

推荐阅读