组合框对象列表

时间:2011-08-22 16:01:57

标签: c# asp.net-mvc-3

我有一个表单,其中一个字段应该是使用combox / multiple-select下拉列表从另一个表中的对象集合(0或更多),建立这个的最佳做法是什么? e.g:

public class Person{
    public int PersonId { get; set; }
    public string PersonName  { get; set; }

    public virtual ICollection<Address> Addresses { get; set; }
    ///or
    public IList<Address> Addresses { get; set; }
    ///or
    public IEnumerable<Addresses > Addresses { get; set; }
}

感谢

1 个答案:

答案 0 :(得分:2)

一种方法是在控制器中填充地址列表,并使用Html.DropDownList帮助程序创建下拉列表。

例如:

public ActionResult Index()
{
   var addressList = <YourAddressListHere>;
   ViewData["Addresses"] = new SelectList(addressList, "<ValueProperty>", "<NameProperty>");
   return View();
}

在您看来(Razor语法):

@Html.DropDownList("AddressDropDown", (ViewData["Addresses"] as SelectList))

如果你想进行多选,还有Html.ListBoxFor和Html.ListBox助手。适用相同的基本方法。


(编辑) 对不起我的误会。

要获取所选地址列表,您可以在“POST”处理程序中将控件名称添加为参数,并在保存/编辑/插入功能期间将其解压缩。

[HttpPost]
        public ActionResult Edit(int[] addressList, <your parameters>)
.....

使用UI代码:

<div class="editor-field">    
    @Html.ListBox("addressList") 
</div>

您可以使用所选地址ID列表执行任何操作。我知道使用MVC有更好的方法可以做到这一点。如果有人看到这个并知道更好的方式,请评论,因为我想知道自己。我知道你可以创建一些自定义的绑定器类,我认为它们会自动完成所有这些操作,但是我还没有用MVC做到这一点。我,我自己,是MVC的初学者。

无论如何,我希望这有点帮助。