在我看来
<%= Html.DropDownListFor( x => x.Countries[ i ], Model.CountryList )%>
在我的控制器中
public int[ ] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
当表单发布时没有问题,填充下拉列表并发布用户选择的值。但是当我尝试将已经指定值的表单加载到Countries []时,它不会被选中。
答案 0 :(得分:24)
不确定这是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
是国家/地区名称。
答案 1 :(得分:10)
我也是这样。使用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>
控制器中的nifty位为Selected = o.fruitID == selectedFruit
,其作用类似于SQL CASE语句; Lance Fisher真的很好地解释了这一点(感谢兰斯,你的帖子真的帮助了我:)
答案 2 :(得分:6)
我知道这个问题有点陈旧,但我刚刚遇到这个问题,循环遍历一个对象列表,并尝试将这些值绑定到我的编辑视图中的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是一个在我的Controller中填充的SelectList。
答案 3 :(得分:0)
这有点像黑客,而且依赖JavaScript,但它对我来说非常好。
您需要知道字段将生成的客户端ID(通常这些可以手动计算,但为了安全起见,您可能希望使用类似FieldIDFor method的内容。
你只需要在jQuery的$(文档)中准备基于模型的值.ready:
<script type="text/javascript">
$(document).ready(function () {
@for(var i = 0; i < 5; i++)
{
<text>
$("#@Html.FieldIDFor(m => m.Countries[i])").val("@Model.Countries[i]");
</text>
}
});
</script>
答案 4 :(得分:-1)
选择框发送单个值,因此Countries
属性不应该是数组。同样在你的帖子中,不清楚你在lambda表达式中使用的i
变量来自何处,并且助手中使用的x.CountryList
将无法编译,因为x
未定义。
型号:
public class MyModel
{
public int SelectedCountry { get; set; }
public List<SelectListItem> CountryList { get; set; }
}
查看:
<%= Html.DropDownListFor(x => x.SelectedCountry, Model.CountryList) %>
更新:
根据评论,似乎有多个下降。我怀疑问题可能来自i
循环中用作索引的for
变量。
您可以尝试这样做:
型号:
public class MyModel
{
public int[] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
}
查看:
<% foreach (var country in Model.Countries) { %>
<%= Html.DropDownListFor(x => country, Model.CountryList) %>
<% } %>
答案 5 :(得分:-1)
不要在viewmodel中使用IEnumerable,而是使用像这样的对象List:
public List<PairVM<string,string>> TiposValorCobertura { get; private set; }
在您的视图中,当您在循环中为下拉列表分配可选元素时,请执行以下操作:
@Html.DropDownListFor(m => m.Coberturas[i].TipoLimiteInferior, new SelectList(Model.TiposValorCobertura,"Key","Description", Model.Coberturas[i].TipoLimiteIferior))
其中“Key”和“Description”是PairVM的属性