在我看来
<%= Html.DropDownListFor( x => x.Countries[ i ], Model.CountryList )%>
在我的控制器中
public int[ ] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
当表单被发布时,没有问题,下拉列表被填充,用户选择的值被发布。但是,当我尝试加载已分配给国家/地区的值的表单时,它没有被选中。
发布于 2011-03-02 04:15:46
我也得到了同样的结果。当使用foreach循环一个DropDownListFor (即在一个页面上呈现多个选择元素)时。
我的变通方法是在控制器而不是视图中设置选定的值:类似于:
在控制器中:
public class FruitList
{
public int? selectedFruit{ get; set; }
public List<SelectListItem> fruits
{
get
{
fruitEntities F = new fruitEntities();
List<SelectListItem> list = (from o in F.Options
select new SelectListItem
{
Value = o.fruitID,
Text = o.fruit,
Selected = o.fruitID == selectedFruit
}).ToList();
return list;
}
}
}
public class ViewModel
{
public List<FruitList> collectionOfFruitLists { get; set; }
}
在视图中
<table>
<% for (int i=0; i < Model.collectionOfFruitLists.Count; i++ )
{ %>
<tr>
<td><%: Html.DropDownList("fruitSelectList", collectionOfFruitLists[i].fruits, "Please select...") %></td>
</tr>
<%} %>
</table>
最妙的地方是控制器中的Selected = o.fruitID == selectedFruit
,它的作用类似于SQL CASE语句;Lance Fisher对此进行了很好的解释(感谢兰斯,你的帖子真的帮了我的忙:)
发布于 2013-04-09 22:03:32
不确定这是mv4的新特性还是在以前的版本中存在。但是DropDownListFor包含了一个用于SelectList构造函数的附加参数。
SelectList(IEnumerable, String, String, Object)
例如:
Html.DropDownListFor( x => x.Countries[ i ], New SelectList(Model.CountryList,"ID","Description",Model.Countries[i]))
其中ID
是CountryList
对象中的国家/地区ID,Description
是国家/地区名称。
发布于 2016-08-31 04:41:54
我知道这个问题有点老了,但我只是在遍历对象列表并尝试将值绑定到我的编辑视图中的DropDownListFor时遇到了这个问题。
我用一个内联解决方案克服了这个问题,我使用了其他人为这个问题提供的一些以前解决方案中的逻辑。
绑定到我的模型:
@Html.DropDownListFor(model => model.QuestionActions[i].QuestionActionTypeId,
Model.QuestionActionTypes.Select(x => new SelectListItem() { Value = x.Value, Text = x.Text, Selected = (x.Value == Model.QuestionActions[i].QuestionActionTypeId.ToString()) }).ToList(),
"Select Action Type",
new { })
Model.QuestionActionTypes是一个填充在我的控制器中的SelectList。
https://stackoverflow.com/questions/2631397
复制相似问题