【问题标题】:Send a Javascript Array to a Controller And Render View Result in Another URL将 Javascript 数组发送到控制器并在另一个 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 时不能返回视图。您需要返回一个局部视图。

标签: javascript c# html ajax asp.net-mvc


【解决方案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)");
    

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多