我试图这样做:
这是我的ViewModel和Model:
SelecList
这是我的控制器。我在此处构建ViewBag
并通过OpeningYearViewModel viewmodel = new OpeningYearViewModel {
OpeningYearId = 1,
Description = "2015 - II",
GradesList = new List<Grade>
{
new Grade { GradeId = 1, Name = "Grade 1", CurrencyId = 1, Cost = 100 },
new Grade { GradeId = 2, Name = "Grade 2", CurrencyId = 2, Cost = 200 },
new Grade { GradeId = 3, Name = "Grade 3", CurrencyId = 2, Cost = 150 }
}
};
SelectList list = new SelectList(
new List<SelectListItem>
{
new SelectListItem { Text = "S/.", Value = "1"},
new SelectListItem { Text = "$", Value = "2"},
}, "Value" , "Text");
ViewBag.currencyList = list;
return View(viewmodel);
@model Test.Models.OpeningYearViewModel
@for(int i = 0; i < Model.GradesList.Count; i++)
{
@Html.DropDownListFor(x => x.GradesList[i].CurrencyId, new SelectList(ViewBag.currencyList, "Value", "Text"))
@Model.GradesList[i].CurrencyId //This is just to know the CurrencyId on every item.
}
在我的视图中,我需要为GradesList上的每个项目使用DropDownListFor,所以我这样做:
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket=io();
$('form').submit(function(){
var un=$('#un').val();
var pw=$('#pw').val();
socket.emit('login',un,pw);
return false;
});
</script>
我正确地渲染了每个选项,但我无法在页面加载中选择正确的选项: render of view
我可以做我想做的事情,我做错了什么,或DropDownListFor以不同的方式工作?
谢谢!
答案 0 :(得分:2)
我无法理解为什么会发生这种情况,但您可以通过明确设置所选值来解决此问题。这可以通过将Model.GradesList[i].CurrencyId
作为第四个参数传递给SelectList
的构造函数来完成:
@for(int i = 0; i < Model.GradesList.Count; i++)
{
@Html.DropDownListFor(x => x.GradesList[i].CurrencyId,
new SelectList(ViewBag.currencyList, "Value", "Text", Model.GradesList[i].CurrencyId))
}
答案 1 :(得分:0)
因为DropDownListFor在循环中用于生成索引输入;因此生成输入控件将生成名称为&#34; GradeList [0] .CurrencyId&#34;,&#34; GradeList [1] .CurrencyId&#34; ......由于此框架不会绑定选择列表中的选定值,因为它无法获取反射中的值以供选择。这就是为什么必须使用以下SelectList构造函数来设置所选值的原因。
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField,
object selectedValue
)
但是,如果DropDownListFor绑定到像
这样的简单表达式@Html.DropDownListFor(model => model.CurrencyId, new SelectList(ViewBag.Items, "Value", "Text"))
然后选择将自动生效。