MVC 从 Javascript 调用新的 Action 和 View 并发送 Array
Posted
技术标签:
【中文标题】MVC 从 Javascript 调用新的 Action 和 View 并发送 Array【英文标题】:MVC Call new Action and View from Javascript and send Array 【发布时间】:2016-08-28 09:37:05 【问题描述】:我目前在网格中有一个 IEnumerable 视图,我添加了复选框,以允许我选择项目(我通过 javascript 获取 id 并构建一个仅包含 id 的数组)。
我有一个按钮,它应该将数组发送到一个新动作并加载相应的视图。
我最初尝试通过有效的 JSON 对象发送数组,但我无法让控制器加载新视图,它只是将结果返回到当前视图(不是我想要的)。
所以我现在只是尝试以下方法:
window.location.href = '/TeamSelector/TeamList?array=' +SwimmerList;
这是有效的,但对象没有被正确发送,因为我在控制器端的数组中没有收到任何内容。
public ActionResult TeamList (List<int> Array)
// Do something here
return view(results)
有人可以告诉我如何构造 JavaScript 代码以发送数组,以便控制器接受它。
任何建议/建议将不胜感激。
安迪。
【问题讨论】:
它需要是/TeamSelector/TeamList?array=1&array=2&array=3
等
@StephenMuecke 非常感谢您的快速回答。我刚刚测试过,它第一次工作。我将编写一些代码来遍历数组并将文本添加到 url(这可能需要我 3 周和另外 4 个 SO 问题)。斯蒂芬您能否将其发布为答案,以便我标记它,您为我解决了另一个问题,非常感谢。
如果您给我 30 分钟,我还会向您展示如何使用 javascript 数组中的值生成它:)
@StephenMuecke,不,请不要,我会弄清楚的,当我们完全陷入困境时,你的时间最好花在帮助我这样的人上!!我已经有了基础知识,不应该花太长时间:)
好的,但我稍后会更新它:)
【参考方案1】:
为了将一组值回传到带有签名的 GET 方法
public ActionResult TeamList (List<int> Array)
你的网址必须是
/TeamSelector/TeamList?array=1&array=2&array=3 // etc
实现此目的的一种方法是(假设您的复选框有 class="checkbox"
)
location.href = '/TeamSelector/TeamList?array=' + $('.checkbox:checked').map(function ()
return $(this).val();
).get().join('&array=');
【讨论】:
不幸的是,我一直坚持使用 Grid.MVC 的路线,我发现随着时间的推移,它非常有限,而且是一个非常死的插件。其中的复选框功能很奇怪,显示了两个复选框,我似乎无法更新它们,所以我添加了单击功能来手动构建我的数组。如果没有 Grid MVC,您的优雅解决方案将是完美的。【参考方案2】:感谢 Stephen 和他的回答,我编写了一个基本脚本来使用数组数据构建 url,现在一切正常。
var url = '/TeamSelector/TeamList?';
for (var i = 0; i < SwimmerList.length; i++)
if (i == 0)
url = url + 'array=' + SwimmerList[i];
else
url = url + '&array=' + SwimmerList[i];
window.location.href = url;
由于我使用Grid.MVC,我一直在努力使用复选框并获取它们的状态,所以我最终在复选框中添加了一个点击按钮,并以这种方式控制它来构建我的数组。
【讨论】:
以上是关于MVC 从 Javascript 调用新的 Action 和 View 并发送 Array的主要内容,如果未能解决你的问题,请参考以下文章
从asp.net mvc中的switch case调用javascript函数