ASP.NET MVC +剃须刀:具有相同选项的多个下拉菜单

时间:2019-03-18 12:05:10

标签: asp.net-mvc razor

我有一个模型,其中包含对象列表,所有对象都应具有可编辑的下拉列表。例如,考虑具有以下定义的图书库:

class Category
{
    int id;
    int name;
}

class Book
{
    int id;
    string name;
    int categoryId;
}

class Library
{
    List <Book> books;
}

因此,图书馆有一个图书清单,每本书都有一个类别。在用户界面中,类别是从下拉列表中选择的,因此每本书有一个下拉列表。所有书籍的类别列表相同。我该如何使用剃刀刀视图进行这项工作?当尝试使用html helper将下拉列表绑定到书籍列表中的特定索引时,index变量使用它的最后一个值,因此所有下拉列表都绑定到同一本书。另外,如何处理添加/删除书籍?

视图的简化版:

@for (int i = 0; i < Model.Books.Count; ++i)
{
    <tr>
        <td>
            @Html.DropDownListFor(model => model.Books[i].CategoryId, (IEnumerable<SelectListItem>)ViewBag.Categories)
        </td>
    </tr>
}

编辑:问题似乎是下拉列表没有获得初始值。如果我更改它们并保存列表,则正确的值将发送回后端。知道是什么原因吗?

1 个答案:

答案 0 :(得分:0)

找到了一个解决方案,尽管不是很优雅。我正在为每本书创建一个新的下拉菜单,并在这些下拉菜单中设置所选的值:

DropDownListFor(model => model.Books[i].CategoryId, ((IEnumerable<SelectListItem>)ViewBag.Categories).Select(x => new SelectListItem(){Value = x.Value, Text = x.Text, Selected = Model.Books[i].CategoryId.ToString() == x.Value}))