从DB获取值的问题

时间:2016-05-10 11:16:52

标签: c# asp.net-mvc

我目前正在研究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输出看起来像

Output

有人可以告诉我,我哪里出错了。

2 个答案:

答案 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)
           }
      }   
}