0

我有一个 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'
    });
});

我在这里做错了什么?

4

3 回答 3

0

没有 AJAX 就像PRG 模式一样,你可以发布一个表单。

@{
    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. 像JSON一样将其存储在Web Storage中sessionStorage
  2. 执行常规 GET 以导航到您的新页面(例如<a href="../review">Review</a>
  3. 从中检索列表sessionStorage并构建 html
于 2013-06-06T20:44:06.303 回答
0

参数名称应该与发送的数据的名称相同,所以如果数据对象被称为文档,那么你在控制器中的参数应该具有相同的名称,如下所示。

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

Javascript

$('.js_btn-review').click(function () {
    $.ajax({
        url: '/Document/Review',
        data: JSON.stringify( documents ),
        type: 'Post'
    });
});
于 2013-06-06T19:32:20.430 回答
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=&undefined=&undefined=&undefined=&

通过将其更改为

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

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

应填充模型。

至于视图更改,您将需要执行 .ajax 以外的其他操作并获得响应。它不会改变页面。

于 2013-06-06T19:24:47.230 回答