我目前正在研究MVC应用程序并将一些信息保存到数据库中。根据这些信息,我保存了一些复选框值,这些复选框值保存在自己的列中
string 1, string 2, string 3
现在我正在尝试检索这些值,并在其他页面中选中复选框。但是,我应该得到两个复选框,我只得到一个。返回的值是正确的,但由于某些奇怪的原因,视图中只显示一个复选框
在我的控制器中,我有以下代码
IEnumerable<MyEntity> myEntity = entityRepo.GetAll().Where(a => a.UserId == id);
List<CheckBox> checkBoxList = new List<CheckBox>();
foreach (var items in myEntity)
{
checkBoxList.Add(
new CheckBox
{
Text = items.EightWaste,
Checked = true,
Value = items.EightWaste,
});
}
然后在视图中我有
@foreach(var items in Model.EightWatseChkBox)
{
@Html.DisplayFor(model => items.Text)
@Html.CheckBoxFor(model => items.Checked)
}
我的UI输出看起来像
有人可以告诉我,我哪里出错了。
答案 0 :(得分:1)
您的值以逗号分隔的字符串形式存储在字段中,因此要为每个“字”生成一个复选框,您需要将字符串拆分为数组。
EightWatseChkBox
请注意,模型中的属性IList<CheckBox>
必须为IEnumerable<CheckBox>
而不是for
,以便您可以在视图中使用@for (int i = 0; i < Model.EightWatseChkBox.Count; i++)
{
@Html.DisplayFor(m => m.EightWatseChkBox[i].Text)
@Html.CheckBoxFor(m => m.EightWatseChkBox[i].Checked)
}
循环
string[] selected = model.EightWatseChkBox.Where(x => x.Checked).Select(x => x.Text);
string combined = String.Join(",", selected);
并且在POST方法中,您可以再次加入所选值
foreach
有关无法使用IList<CheckBox>
循环绑定到集合的原因的详细信息,请参阅this answer(请注意,如果您无法将模型属性更改为EditorTemplate
,则可以使用fbq('track', \"page\");
选项)
答案 1 :(得分:-1)
试试这个,
在您的控制器中写如下;
IEnumerable<MyEntity> myEntity = entityRepo.GetAll().Where(a => a.UserId == id);
ViewBag.Chekboxlist = myEntity;
然后你的观点将是
@foreach(var items in Model.EightWatseChkBox)
{
@Html.DisplayFor(model => items.Text)
if(ViewBag.Chekboxlist != null)
{
IEnumerable<MyEntity> myEntity = (IEnumerable<MyEntity>)ViewBag.Chekboxlist;
foreach(var item in myEntity )
{
@Html.CheckBoxFor(model => item.Checked)
}
}
}