发送一个Javascript数组到控制器,并在另一个URL中呈现视图结果

本文关键字:URL 另一个 结果 视图 控制器 一个 数组 Javascript | 更新日期: 2023-09-27 18:09:18

我已经尝试了4天没有成功了,我是一个初级开发人员,所以这就是为什么。

背景:

我有一个灵活的网格,我显示从数据库中收集的数据,在一个非常特殊的列,有一个复选框,我创建一个javascript函数,得到实体Id当你点击复选框并将其存储在javascript数组,我想发送到ActionResult

问题:

我可以通过使用Ajax,但我不能渲染ActionResult视图,我得到404。试图使用@Html.ActionLink,但不识别javascript数组。那么,如何将javascript数组发送到控制器并遵循控制器流程,例如用另一个URL呈现另一个视图呢?

Javascript数组:

var arrayId = new Array();

视图:

<a href="@Url.Action("SomeAction", "SomeController", new { area = "SomeArea", arrayId = arrayId })">

控制器:

public ActionResult SomeAction(object[] arrayId)
{
  //some code
  return View("AnotherView");
}

解决方法:

  • Ajax,如果我可以在另一个URL中呈现视图

  • HTML的& lt;

  • 或c# Helper,可能将javascript数组传递给视图模型,但我不知道如何。

  • PartialView吗?

发送一个Javascript数组到控制器,并在另一个URL中呈现视图结果

…我想发送给ActionResult

我相信你可能有一点困惑。在ASP。. NET MVC,任何接收请求,无论是来自AJAX还是完整的请求,都是动作。该操作的结果,如JSON响应或完整页面的结果,是一个ActionResult。

总是把它想象成请求>响应。请求是由操作处理的,响应是操作输出的。

现在,回答你的问题。将此页面视为从DB输出id的第一个页面:
<form method="post" action="/home/someaction">
    <ul>
        <li><label><input type="checkbox" name="arrayId" value="1" />1</label></li>
        <li><label><input type="checkbox" name="arrayId" value="2" />2</label></li>
        <li><label><input type="checkbox" name="arrayId" value="3" />3</label></li>
        <li><label><input type="checkbox" name="arrayId" value="4" />4</label></li>
    </ul>
    <button>Post array to action SomeAction</button>
</form>
<script type="text/javascript">
        $(function(){
            $('form').on('submit', function () {
                $('checkbox:checked').each(function (ix, el) {
                    $(el).attr('name', 'arrayId[' + ix + ']');
                });
            });
        });
</script>

让我们看看这里发生了什么:

  • 对于从DB返回的每个项目,我们有一个复选框。注意名称 attr,这很重要
  • 所有东西都在指向第二个动作的表单中。它将接收数组
  • 当提交表单时,我们遍历每个选中的复选框以将名称更改为arrayId[0]之类的内容。这是必需的。ASP。NET使用名称attr将接收到的数据绑定到操作期望的数据。如果它是一个集合(如列表或数组),则名称还必须包含一个基于0的索引器。这就是我们在发布表单之前所做的。

将接收这篇文章的操作看起来像:

[HttpPost]
public ActionResult SomeAction(string[] arrayId)
{
    return View(arrayId);
}

通过ajax向服务器发送数据是个好主意,但问题是如何响应用户。一种解决方案是将用户重定向到另一个页面,或者用适当的更改刷新当前页面。这样你就可以使用JavascriptResult了。

return JavaScript("window.location = 'http://www.domain.com/...'");

return JavaScript("location.reload(true)");