0

我有一个类 Farm,其中包含 Animal 类型的类列表。

public class Farm {
    public list<Animal> Animals;
    // other members..
} 
public class Animal {
    public string Name;
    public string Family;
}

我想为我的 Farm 对象创建一个 createOrEdit 视图,并且我想将 DropDownLists 用于动物的名称和家庭。选择来自数据库。

当我将 Animal 模型传递给视图进行编辑时,我希望 DropDownLists 以某种方式匹配每个动物的属性并设置列表的选定值。

我已经尝试了很多这样的事情:

@for(int i = 0; i < Model.Animals.Count; i++)
{ 
    @Html.DropDownListFor(model => model.Animals[i].Name, Model.AnimalNames) 
    // where Model.AnimalNames is a SelectList

    @Model.Animals[i].Name // (for testing) this properly displays the name I want to be selected in the list
}

我在这个网站上看到了很多关于在控制器中创建 SelectLists、迭代每个项目并在适当的地方设置 selected 属性的建议。但是必须有一种更清洁的方法......如果我的农场有 100 只动物怎么办。在控制器中创建 200 个 SelectList,遍历它们中的每一个以匹配选定的值,然后将其传递给视图似乎并不合理。

那么,我有没有一种简单的方法来获取 Animal.Name[i] 值并在 DDL 中找到它的匹配列表项?

谢谢!!

4

1 回答 1

0

在您的 foreach 循环中,您可以执行以下操作:

@for(int i = 0; i < Model.Animals.Count; i++)
{ 
   var original = Model.AnimalNames;
   var animalSelected = new SelectList(original.Items, original.DataValueField, original.DataTextField, model.Animals[i].Name);

   @Html.DropDownListFor(model => model.Animals[i].Name, animalSelected)

}

这样,在您的控制器中,您只创建一个带有 AnimalNames 的 SelectList...,在您的视图中,您创建 SelectList 并为每个选择值。

当使用需要显示每个项目的当前值的可编辑项目列表时,我们使用这种方法。

于 2013-01-25T20:48:35.100 回答