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

Posted

技术标签:

【中文标题】将 Javascript 数组发送到控制器并在另一个 URL 中呈现视图结果【英文标题】:Send a Javascript Array to a Controller And Render View Result in Another URL 【发布时间】:2015-11-16 08:57:46 【问题描述】:

我现在尝试了 4 天没有成功,我是初级开发人员,所以这就是原因。

上下文:

我有一个flexigrid,其中显示了从数据库收集的数据,在一个非常特殊的列中,有一个复选框,我创建了一个 javascript 函数,当您单击复选框并将其存储在 javascript array 中,我想将其发送到 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 '

',如果我可以传递 javascript 数组。

或者 C# Helper,也许将 javascript 数组传递给视图模型,但我不知道如何。

部分视图?不是解决方案。

【问题讨论】:

使用 Ajax 时不能返回视图。您需要返回一个局部视图。 【参考方案1】:

...我想发送到 ActionResult

我相信您在这里可能会有些困惑。在 ASP.NET MVC 中,从 AJAX 或完整请求接收到请求的任何内容都是动作。该操作的结果(如 JSON 响应或整页结果)是 ActionResult。

始终将其视为请求>响应。请求由您的操作处理,响应是操作输出的内容。

现在,回答您的问题。将此页面视为第一个页面,它从数据库中输出 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>

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

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

将收到此帖子的操作如下所示:

[HttpPost]
public ActionResult SomeAction(string[] arrayId)

    return View(arrayId);

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于将 Javascript 数组发送到控制器并在另一个 URL 中呈现视图结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使控制器在单击时插入时间并在另一次单击时删除时间?

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?

Ruby on Rails:将数组的 javascript 数组发送到 ruby​​ 控制器

C#.NET 在一台机器上加密 XML 并在另一台机器上解密

如何将数组数据从控制器发送到刀片并访问 javascript 变量中的数据

Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?