复选框的列表或选择列表
List or SelectList for Checkboxes
我需要找出一种方法来为我的数据库中的多个属性的复选框创建列表或选择列表。
模型具有 UrgentNeedsFood、UrgentNeedsMedication、UrgentNeedsOther 作为单独的属性,我需要为每个要显示的属性创建复选框。因此,如果用户单击一个或所有复选框,则相应复选框的值将保存到数据库中的每个人 属性。
我想使用 List 或 SelectList 进行模型绑定,并 get/set 值 from/to 数据库。没有 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>
如您所见,none 个复选框已被选中,我知道它们应该被选中,但我不知道如何让控制器选中 属性。
有没有人知道如何从数据库中获取值并在控制器中分配选中的值?
作为下拉列表,这已经很简单了,但我需要改用复选框。
-- 更新--
我看到数据库中的数据类型是bit
。 EF 的数据类型为 Nullable<bool>
。他们确实会互相交谈,但我不确定这是否会有所不同。
尝试像这样更新您的代码
@foreach (SelectListItem item in (IEnumerable<SelectListItem>)ViewBag.UrgentNeeds)
我没有为每个复选框使用,而是为每个复选框使用了以下内容:
- @Html.CheckBox("Urgent_Needs_Medication") 用药
- @Html.CheckBox("Urgent_Needs_Life_Health_Safety") Life/Health/Safety
- @Html.CheckBox("Urgent_Needs_Food") 食物
- @Html.CheckBox("Urgent_Needs_Other") 其他
这至少从数据库返回了正确的结果。当我选中或取消选中复选框时,这也会更改数据库中的数据。
我需要找出一种方法来为我的数据库中的多个属性的复选框创建列表或选择列表。
模型具有 UrgentNeedsFood、UrgentNeedsMedication、UrgentNeedsOther 作为单独的属性,我需要为每个要显示的属性创建复选框。因此,如果用户单击一个或所有复选框,则相应复选框的值将保存到数据库中的每个人 属性。
我想使用 List 或 SelectList 进行模型绑定,并 get/set 值 from/to 数据库。没有 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>
如您所见,none 个复选框已被选中,我知道它们应该被选中,但我不知道如何让控制器选中 属性。
有没有人知道如何从数据库中获取值并在控制器中分配选中的值?
作为下拉列表,这已经很简单了,但我需要改用复选框。
-- 更新--
我看到数据库中的数据类型是bit
。 EF 的数据类型为 Nullable<bool>
。他们确实会互相交谈,但我不确定这是否会有所不同。
尝试像这样更新您的代码
@foreach (SelectListItem item in (IEnumerable<SelectListItem>)ViewBag.UrgentNeeds)
我没有为每个复选框使用,而是为每个复选框使用了以下内容:
- @Html.CheckBox("Urgent_Needs_Medication") 用药
- @Html.CheckBox("Urgent_Needs_Life_Health_Safety") Life/Health/Safety
- @Html.CheckBox("Urgent_Needs_Food") 食物
- @Html.CheckBox("Urgent_Needs_Other") 其他
这至少从数据库返回了正确的结果。当我选中或取消选中复选框时,这也会更改数据库中的数据。