C# 列出或选择列表作为复选框

C# 列出或选择列表作为复选框,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我需要找到一种方法,为数据库中的多个属性的复选框创建列表或SelectList 该模型将UrgentNeedsFood、UrgentNeedsIndication、UrgentNeedsTother作为单独的属性,我需要为要显示的每个属性创建复选框。因此,如果用户单击一个或所有复选框,相应复选框的值将保存到数据库中的每个单独属性 我想使用List或SelectList进行模型绑定,并从数据库获取/设置值。如果没有ViewModel来表示属性,我该怎么做 模型如下: 这就是我试图在控制器中执行的

我需要找到一种方法,为数据库中的多个属性的复选框创建列表或SelectList

该模型将UrgentNeedsFood、UrgentNeedsIndication、UrgentNeedsTother作为单独的属性,我需要为要显示的每个属性创建复选框。因此,如果用户单击一个或所有复选框,相应复选框的值将保存到数据库中的每个单独属性

我想使用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;
}
当我不尝试上述代码时,我从数据库返回以下视图:

以下是视图的代码:

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

@Html.LabelFor(model=>model.emergency\u需要药物,新的{@class=“control label”})
@LabelFor(model=>model.emergency\u Needs\u Life\u Health\u Safety,新的{@class=“control label”})
@Html.LabelFor(model=>model.emergency\u Needs\u Food,new{@class=“control label”})
@LabelFor(model=>model.emergency\u Needs\u Other,新的{@class=“control label”})
正如您所看到的,没有任何复选框被选中,我知道它们应该被选中,但我不知道如何让控制器检查checked属性

是否有人对如何从数据库中获取值并在控制器中分配选中的值有所了解

作为一个下拉列表,这很简单,但我需要使用复选框

--更新--


我看到数据库中的数据类型是
bit
。EF的数据类型为
Nullable
。他们确实会互相交谈,但我不确定这是否会产生影响。

尝试像这样更新代码

@foreach (SelectListItem item in (IEnumerable<SelectListItem>)ViewBag.UrgentNeeds)
@foreach(在(IEnumerable)ViewBag.UrgentNeeds中选择ListItem项)

我想我知道答案了。请让我知道你的想法。 我没有为每个复选框使用,而是为每个复选框使用以下内容:

  • @复选框(“紧急需要药物治疗”)药物治疗
  • @Html.CheckBox(“紧急需要生命健康安全”)生命/健康/安全
  • @复选框(“紧急需要食物”)食物
  • @复选框(“紧急需要其他”)其他

这至少从数据库返回了正确的结果。当我选中或取消选中复选框时,这也改变了数据库中的数据。

如果要选中哪个复选框,您应该将模型属性设置为true。这是否回答了您的问题?对于错误,请尝试使用
var
而不是
SelectListItem
(作为ViewBag迭代中的数据类型)将SelectListItem更改为var,并出现以下错误:无法将类型“System.Web.Mvc.SelectListItem”隐式转换为“System.Collections.IEnumerable”。存在显式转换(是否缺少转换?)出现以下错误:CS0305:使用泛型类型“IEnumerable”需要1个类型参数我已更新答案以添加SelectListItem的类型。
@foreach (SelectListItem item in (IEnumerable<SelectListItem>)ViewBag.UrgentNeeds)