c# - 将 DropDownListFor 与 ViewModel 上的列表绑定(bind)

标签 c# asp.net-mvc html.dropdownlistfor viewbag asp.net-mvc-viewmodel

我正在尝试这样做:

这是我的 View 模型和模型:

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; }
}

这是我的 Controller 。我在这里构建了一个 SelecList 并通过 ViewBag 将其传递给 View

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 以不同的方式工作?

谢谢!

最佳答案

我无法理解为什么会发生这种情况,但您可以通过显式设置所选值来解决它。这可以通过将 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))
}

关于c# - 将 DropDownListFor 与 ViewModel 上的列表绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321790/

相关文章:

javascript - 如何集成 requirejs?

asp.net-mvc - ASP.NET MVC DropDownListFor 不支持 SelectListItem.Selected

c# - 带有自定义属性的 DropDownListFor - 在属性名称中?

c# - "AssemblyInfo"MSBuild 任务在 Jenkins 构建中失败

c# - 组合框无法准确获取数据库值

c# - 为什么不调用 RelayCommand?

具有多个路由值的 ASP.NET MVC URL 路由

c# - 使用 Autofac 解析通用抽象类的所有派生类

asp.net-mvc - MVC 应用程序中的后退按钮功能

css - 为选项设置 DropDownListFor CSS