【问题标题】:How do I pass a list of integers to an MVC action?如何将整数列表传递给 MVC 操作?
【发布时间】:2011-03-13 14:56:16
【问题描述】:

我有一个依赖于整数列表的操作。我的第一直觉是简单地用一个列表来声明这个动作。

我尝试将控制器中的操作声明为:

public ActionResult EditMultiple(List<int> ids)

在我的 View 调用中是这样的:

<%= Html.ActionLink("EditMultiple", "EditMultiple", new { ids = new List<int> {2, 2, 2} })%>

虽然它编译了当我在操作中放置断点时列表是空的。有人知道为什么或有其他方法吗?

添加更多关于场景的细节:

我正在尝试同时“编辑”多个实体。我已经有了一个应用程序,它允许我创建/编辑/查看有关图书馆书籍的信息。我有一个局部视图,允许用户编辑有关单本书的信息并将其保存到数据库中。

现在我想创建一个视图,允许用户使用单个提交按钮编辑有关多本书的信息。我创建了一个动作 EditMultiple,它只呈现每本书的部分内容(我的这个视图的模型是 List),然后添加提交按钮。

【问题讨论】:

  • 你在行动中发布了什么?
  • 在这种情况下,我上面的例子有点接近我的真实情况。这是 GET 而不是 POST。我会用更多关于真实场景的信息来更新描述。

标签: asp.net-mvc controller


【解决方案1】:

是的。默认模型绑定器可以将“ids”绑定到任何 ICollection。但是你必须提交多个同名的参数。这消除了使用辅助方法“ActionLink”。您可以使用 url helper Action 并将 ID 附加到链接中,如下所示:

<a href="<%= Url.Action("CreateMultiple")%>?ids=2&ids=1&ids=3">Test link</a>

Here's the link 来自 Haack 的区块。

【讨论】:

  • 谢谢。遗憾的是我不能使用 Html 帮助程序,但硬编码的值仅用于原型设计,所以它可以解决问题。
【解决方案2】:

我不认为

new List<int> {2, 2, 2}

正确转换为可绑定的 POST,您要发送

Ids=1&Ids=2&Ids=3

逗号单独的列表也可以,我不确定,我不使用糟糕的默认模型绑定器。

你为什么要这样做?我希望那是其他东西的伪代码......

【讨论】:

  • 问题中添加了更多详细信息。当然,我实际上并不是在编辑书籍,但出于讨论的目的,这已经足够了。如果您能想出比为 EditMultiple 创建一个 Action 更好的方法来编辑多本书,它会为列表中的每个模型呈现 Partial,而不是我全神贯注。这是我的第一个真正的 MVC 应用程序,所以我仍在学习框架和设计模式。
  • 因此,请注意那些像我一样试图弄清楚如何提交到客户端也以编程方式提交的 MVC 操作(通过 FormUrlEncodedContent):这意味着只需循环并将相同的键添加到您要从中创建 FormUrlEncodedContent 的 KVP 列表中,多次使用不同的值(毕竟它只是一个 List,而不是正确的字典,所以这是允许的(并且有效!)跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多