0

新しいビューに送信しようとしているオブジェクトの JavaScript 配列があります。私は AJAX を使いたくありません - これはまったく新しいページです。コントローラー アクションに配列を送信する方法がわかりません。

UploadFileビューにオブジェクトを返すアクションがあり、これが JavaScript の配列に追加されます。ユーザーが引き続き結果を「確認」しようとすると、そのオブジェクトの配列が新しいページに送信されます。

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

私はまだ AJAX を使用しようとしましたが、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 パターン と同じように、フォームを POST します。

@{
    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. htmlからリストを取得してsessionStorageビルドする
于 2013-06-06T20:44:06.303 に答える