【发布时间】:2015-10-24 18:27:48
【问题描述】:
我正在尝试这样做:
这是我的 ViewModel 和模型:
public class OpeningYearViewModel
{
public int OpeningYearId { get; set; }
public string Description { get; set; }
public List<Grade> GradesList { get; set; }
}
public class Grade
{
public int GradeId { get; set; }
public string Name { get; set; }
public int CurrencyId { get; set; }
public int Cost { get; set; }
}
这是我的控制器。我在这里建立了一个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);
在我看来,我需要为 GradesList 上的每个项目创建一个 DropDownListFor,所以我这样做:
@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.
}
我正在正确呈现每个选择,但我无法在页面加载时选择正确的选项: render of view
有可能做我想做的事但我做错了什么,或者 DropDownListFor 以不同的方式工作?
谢谢!
【问题讨论】:
-
这是在循环中使用
DropDownListFor()的不幸限制(在 CodePlex 上已报告过几次)。请注意,在您的代码中,您首先创建List<SelectListItem>,然后从中创建一个相同的IEnumerable<SelectListItem>(这就是SelectList),然后您第三次在客户端上再次执行所有操作(这样做有点毫无意义3次) -
@StephenMuecke 好电话。我对 MVC 有点陌生,所以我正在关注一个(糟糕的)教程。现在我正在处理对象列表,然后在视图上创建 SelectList。谢谢。
标签: c# asp.net-mvc html.dropdownlistfor viewbag asp.net-mvc-viewmodel