根据您的评论,您似乎并不是在寻找最“正确”的答案,而只是一个快速而肮脏的“我会怎么做”答案。如果您只想传递列表,您可以像这样设置控制器操作:
public ActionResult MyAction(int[] id)
{
...
}
或者,您似乎表明它是强类型化到具有包含列表的属性的视图模型(我会缩短属性的名称,您很快就会明白为什么)。
在 javascript 中,最简单的方法是使用 jQuery 在超链接上绑定单击事件,该事件获取已检查的项目列表并将其附加到查询字符串。
$("#myLink").click(function()
{
var url = "site.com/action?";
var ids = $(".table").find("input:checked");
ids.each(function()
{
url += "id=" + $(this).val() + "&"
});
window.location = url;
});
基本上,您希望创建一个长查询字符串,其中操作参数的名称一遍又一遍地重复,它标识一个数组。它看起来像这样(id 代表 MyAction 中的 int[] id):
id=15&id=20&id=25&id=30&....
然后,一旦构建了查询字符串,就将用户重定向到该 url。然后,MVC 应该能够将其绑定到数组,这样就一切就绪了。
无论如何,这基本上就是这个想法;我写的语法和 javascript 可能有很大的偏差,所以不要复制我的代码并期望它按原样工作 - 这是我凭空写下来的。如果您的操作绑定到视图模型,那么您需要将查询字符串中的参数设置为模型属性的名称:
selectedids=1&selectedids=2&selectedids=3...
或者,如果数组是对象的属性,而对象的属性是模型的属性......
model.selectedids=1&model.selectedids=2&model.selectedids=3...
您只需要尝试一下即可。