MVC MultiSelectList 在提交表单时发布 NULL

MVC MultiSelectList posts NULL when form is submitted

我很难从 MultiSelectList 中捕获发布的值。当页面加载时,select 列表控件从我的模型中的列表中成功填充。但是提交表单时,模型列表为空。

这些属性在我的 "Contact" 模型中。 Contact 对象只有一个 ExternalUserID (int) 和一个 PublicName (string) 属性.

    public List<Contact> AvailableContacts { get; set; }

    public List<Contact> SelectedContacts { get; set; }

这些控件在我的表单上。

@Html.ListBoxFor(m => m.AvailableContacts,
    new MultiSelectList(Model.AvailableContacts, "ExternalUserID", "PublicName", null),
    new { @class = "form-control", size = "15" })

@Html.ListBoxFor(m => m.SelectedContacts,
    new MultiSelectList(Model.SelectedContacts, "ExternalUserID", "PublicName", null),
    new { @class = "form-control", size = "15" })

这是我的控制器。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditContacts(Contacts model)
{
    if (ModelState.IsValid)
    {
        // Code to save omitted for clarity.
    }
    return View(model);
}

这可能需要一些简单的调整,之前可能有人问过,但我还没有找到关于 SO 的解决方案或在线的简明示例。如果您倾向于将此标记为重复项,请在简明示例中添加 link。

感谢您的帮助。

您需要 属性 才能将所选项目绑定到。多个 <Select> 绑定到并 post 返回一个值类型数组。

public class MyViewModel
{
  public int[] SelectedContacts { get; set; }
  public List<Contact> AvailableContacts { get; set; }
}

查看

@Html.ListBoxFor(m => m.SelectedContacts, new SelectList(Model.AvailableContacts, "ExternalUserID", "PublicName"), new { @class = "form-control", size = "15" })