我有一个表单,其中一个字段应该是使用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; }
}
感谢
答案 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的初学者。
无论如何,我希望这有点帮助。