2014-10-28 98 views
1

我无法从数据库中将所选值分配给选择列表(即在表中)。指定一个值以从数据库中选择列表(在表中)

即使将值传递给它并且它肯定从我的控制器传递到视图,该值默认为第一个选项。

我也尝试了一个不同的选择列表,它正确地在我的表单上传递值,而且选择列表也不起作用。所以我很确定它与表格有关

下面是值传递的截图。 enter image description here

选择列表

public IEnumerable<SelectListItem> ListViewStatusOptions 
{ 
    get 
    { 
     return new[] 
     { 
      new SelectListItem { Value = "Scheduled", Text = "Scheduled" }, 
      new SelectListItem { Value = "OFR-Out for Revision", Text = "OFR-Out for Revision" }, 
      new SelectListItem { Value = "Tool Work Required", Text = "Tool Work Required" }, 
      new SelectListItem { Value = "Delayed", Text = "Delayed" }, 
      new SelectListItem { Value = "In Press", Text = "In Press" }, 
     }; 
    } 
} 

选择列表表

@foreach (var item in Model) { 
    <td> 
     @Html.DropDownListFor(modelItem => item.ListViewStatus, item.ListViewStatusOptions, "Select", new { @id = @Html.ValueFor(modelItem => item.Id)}) 
    </td> 
} 

回答

0

对于值的列表的正确绑定将成为:

for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DropDownListFor(modelItem => modelItem[i].ListViewStatus, new SelectList(Model[i].ListViewStatusOptions, "Value", "Text", Model[i].ListViewStatus)) 
} 

您必须使用for循环而不是for-each,因为如果使用foreach并且发布的数据将不会通过操作方法解析,mvc将不会生成正确的输入名称

1

您需要使用的SelectList对象新SelectListItems的数组。

这个属性添加到您的方法

public IEnumerable<SelectListItem> StatusOptions 
{ 
    get { return new SelectList(ListViewStatusOptions, "Value", "Name"); } 
} 

“价值”是一个包含每个项目的id属性的名称。您可以拥有任何类型的对象列表,而不仅仅是SelectListItems。这就是为什么似乎没有必要传递“价值”,类似地,“名称”是包含向用户显示内容的属性。

然后改变你的剃须刀代码

@foreach (var item in Model) { 
    <td> 
     @Html.DropDownListFor(modelItem => item.ListViewStatus, item.StatusOptions, "Select", new { @id = @Html.ValueFor(modelItem => item.Id)}) 
    </td> 
} 
+0

感谢您的回复和解释。我没有得到这个代码工作(我猜我做错了),但它绝对把我放在正确的道路上,我现在有它的工作,我会发布下面的代码。在你的例子中,它看起来好像不是分配选定的值 – joetinger 2014-10-28 20:07:53

0

我的更新剃刀代码。 正如@ScottMacMaster所解释的,

您需要使用一个SelectList对象new一个SelectListItems数组。 “值”是包含每个项目的ID的属性的名称。 您可以拥有任何类型的对象列表,而不仅仅是SelectListItems。 这就是为什么看起来没有必要传递“价值”,类似地,“名称” 是包含向用户显示内容的属性。

我接收到错误为Name所以我改成了Text

我然后分配item.ListViewStatus作为对象选择的值

@Html.DropDownListFor(modelItem => item.ListViewStatus, new SelectList(item.ListViewStatusOptions, "Value", "Text",item.ListViewStatus), "Select", new { @id = @Html.ValueFor(modelItem => item.Id)})

+1

如果你在模型中设置属性ListViewStatus的值,那么这个选项就会被选中(所以如果你设置了'model.ListViewStatus =“Delayed “'在你的控制器中,那么第4项将被选中,你不需要上面的'SelectList()'中的第四个参数,事实上你不需要创建一个'SelectList',因为它已经是'IEnumerable '(你只是这样做了两次!)然后阅读MajoB的答案 - 你需要一个'for for循环,否则这个不会回发,并且为什么要创建多个'IEnumerable '实例(每个项目都有一个)? – 2014-10-29 00:09:44

+0

+1为好的解释 – joetinger 2014-10-29 12:56:20

相关问题