【问题标题】:MVC MultiSelectList posts NULL when form is submitted提交表单时,MVC MultiSelectList 发布 NULL
【发布时间】:2015-03-19 21:26:49
【问题描述】:

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

这些属性在我的“联系人”模型中。 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 的解决方案或在线的简洁示例。如果您倾向于将此标记为重复,请附上一个简洁示例的链接。

感谢您的帮助。

【问题讨论】:

  • ContactContacts 有什么区别?您有一个Contact 的列表,但该方法中预期的模型是Contact?也许该方法应该期望 Contact?
  • 您是否使用 fiddler 或类似的工具检查了实际通过通道发送的内容?

标签: c# asp.net-mvc forms http-post


【解决方案1】:

您需要有一个属性来将所选项目绑定到。多个&lt;Select&gt; 绑定并回发一个值类型数组。

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" })

【讨论】:

  • 谢谢斯蒂芬。就是这样,加上我需要在提交时选择该列表中的选项,如下所示: $('form').on('submit', function () { $('#SelectedContacts option').prop('selected ', '选中'); });感谢您的帮助。
  • 你是什么意思“我需要在提交时选择选项”?那段 jquery 绝对不是必需的,并且表明您还有其他问题。或者您不了解 ListBox 是什么 - 您只需要 1 个显示所有 AvailableContacts 并将其绑定到 int[] SelectedContacts 的 ListBox。如果您的 ExternalUserID 的值为 1 到 10,并且您在控制器中将 SelectedContacts 设置为 [2, 4],则将选择第二个和第四个选项。如果在视图中选择第 1 和第 5 个选项,SelectedContacts 的值将在回发时为 [1, 5]
  • 对不起,我没有澄清。上下文是我有一对列表框,一个在左边,一个在右边。这些框之间有箭头控件,用户可以将列表项从一个列表移动到另一个列表。它类似于这样的东西 (vb123.com/PublishingImages/200405_rr1.jpg),但在 Web 界面上。由于这种格式,在提交时没有选择右侧列表框中的项目,因为用户单击箭头控件将项目移动到列表中。这些项目只是坐在那个未选中的列表框中。这就是我需要脚本的原因。
  • 你是对的,以传统的标准方式使用列表框,该脚本是不必要的。感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
相关资源
最近更新 更多