DropDownListFor with Icollections

时间:2012-09-26 23:06:58

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

我正在尝试向众议院实体添加多个租户。 我的错误是使用下拉框(option.TenantID == Model.TenantID) 我不知道如何比较int和Icollection。

型号

namespace FlatSystem.Models
{
[Table("House")]
public class House
{
    [Key]
    public int HouseID { get; set; }
    public virtual ICollection<Tenants> TenantID { get; set; }

    public House() {
       TenantID = new HashSet<Tenants>();
    }

}
}

控制器

public ActionResult Edit(int id)
{
    ViewBag.TenantLookupList = TenantGR.All;
    return View(GR.Find(id));
}
//
// POST: /House/Edit/5
[HttpPost]
public ActionResult Edit(House house)
{
    if (ModelState.IsValid)
    {
        GR.InsertOrUpdate(house);
        GR.Save();
        return RedirectToAction("Index");
    }
    return View(house);
}

修改视图

  @using (Html.BeginForm("AddRole", "Role", new { houseId = @Model.HouseID }))
 {
        <table>
        <tr>
            <td>Select to Add Item</td>
            <td>
               <div class="editor-field">
                 @Html.DropDownListFor(model => model.TenantID, ((IEnumerable<FlatSystem.Models.Tenants>)ViewBag.TenantLookupList).Select(option => new SelectListItem
                 {
                   Text = (option == null ? "None" : option.Firstname),
                   Value = option.TenantID.ToString(),
                   Selected = (Model != null) && (option.TenantID == Model.TenantID) <<----Error
                 }), "Choose...")
              </div>
            </td>
           <td><input type="submit" value="Add" /></td>
        </tr>
        </table>
 }

错误

Operator '==' cannot be applied to operands of type 'int' and     'System.Collections.Generic.ICollection<FlatSystem.Models.Tenants>'

1 个答案:

答案 0 :(得分:0)

由于模型中有多个租户,您可能正在寻找ListBox(允许多项选择)。

@Html.ListBoxFor(model => model.TenantID, ((IEnumerable<FlatSystem.Models.Tenants>)ViewBag.TenantLookupList).Select(option => new SelectListItem
    {
        Text = (option == null) ? "None" : option.Firstname),
        Value = option.TenantID.ToString()
    }), "Choose...")

请注意,您不需要显式设置Selected属性,因为这是由模型决定的。您应该会看到Model.TenantID集合中的所有项目都已选中。


如果要设置所选项目,则必须使用Html.ListBox

@Html.ListBox("MyListBox", ((IEnumerable<FlatSystem.Models.Tenants>)ViewBag.TenantLookupList).Select(option => new SelectListItem
{
    Text = (option == null) ? "None" : option.Firstname),
    Value = option.TenantID.ToString(),
    Selected = Model.TenantID.Any(tenant => tenant.ID == option.TenantID)
}), "Choose...")