无法将javascript对象数组发送到新页面

时间:2013-06-06 18:08:28

标签: javascript asp.net asp.net-mvc-4

我有一个javascript数组的对象,我试图发送到我的新视图。我不想使用AJAX - 这是一个新页面。我似乎无法弄清楚如何将数组发送到我的控制器动作。

我有一个动作会将UploadFile对象返回到我的视图中,该动作会以javascript的形式添加到数组中。当用户尝试继续“审核”结果时,我将该对象数组发送到新页面。

public ActionResult Review(List<UploadFile> model)
{
    return View();
}

我仍然尝试使用AJAX,但我遇到了两个问题:1)我想要一个新页面,我不希望它停留在同一页面上,2)模型仍为空。

$('.js_btn-review').click(function () {
    $.ajax({
        url: '/Document/Review',
        data: documents,
        type: 'GET'
    });
});

我不知道该怎么做 - 我知道我以前做过,但我不记得我是怎么做到的。我甚至尝试过设置元素并序列化:

$('.js_btn-review').click(function () {
    $("#documents").val(documents);
    $.ajax({
        url: '/Document/Review',
        data: $("#documents").serialize(),
        type: 'GET'
    });
});

我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

由于你没有陈述js变量文档的结构,我假设它只是一个UploadFiles数组。有点像:

        var documents = [];
        for (var i = 0; i < 10; i++) {
            var d = {
                id: i,
                title: i.toString()
            };
            documents.push(d);
        }

然后你通过ajax发送和发送。这不起作用,因为文档没有容器,因此GET的URL看起来像/ Document / Review?undefined =&amp; undefined =&amp; undefined =&amp; undefined =&amp;

将其更改为

        var data = {
            model: documents
        };
        $('.js_btn-review').click(function () {

            $.ajax({
                url: '/Home/Review',
                data: data,
                type: 'GET'
            });
        });

应该填充模型。

对于视图更改,您需要执行除.ajax以外的操作并获取响应。它不会改变页面。

答案 1 :(得分:0)

参数名称应与要发送的数据的名称相同,因此,如果数据对象称为文档,则控制器中的参数应具有以下相同的名称。

public ActionResult Review(List<UploadFile> documents)
{
    return View();
}

Javascript for that

$('.js_btn-review').click(function () {
    $.ajax({
        url: '/Document/Review',
        data: JSON.stringify( documents ),
        type: 'Post'
    });
});

答案 2 :(得分:0)

没有AJAX 就像PRG Pattern一样,所以你要张贴表格。

@{
    List<UploadFile> list = new List<UploadFile> { ... };
}

@using(Html.BeginForm("Review", "Controller", FormMethod.Post, new { }))
{
    for (int i = 0; i < list.Count(); i++)
    {
        @Html.HiddenFor(m => list[i]);
    }
    <input type="submit" value="Review" />
}

控制器操作

[HttpPost]
public ActionResult Review(List<UploadFile> list)
{
    TempData["Review_list"] = list;
    return RedirectToAction("Review");
}

[HttpGet]
public ActionResult Review()
{
    var list = TempData["Review_list] as List<UploadFile>;
    return View(list);
}

如果您不需要处理服务器上的列表

不要费心回传并将列表保存在javascript中:

  1. 将其存储在Web Storage,例如sessionStorage作为JSON
  2. 定期进行GET导航至新页面(例如<a href="../review">Review</a>
  3. sessionStorage检索列表并构建html