0

レポートを表示する Web ページがあり、動的なフィルターのセットがあります。

ユーザーが名前付きレポートを選択すると、ページは WebApi から有効なフィルターを JSON リストとして取得します。ユーザーがフィルターを選択すると、グリッドに結果が表示されます (これも WebApi 呼び出しを介して)。これまでのところすべて順調です

ここで、データをファイル (Excel など) としてダウンロードできるようにしましたが、問題が発生しました。

ブラウザーがファイルをダウンロードできるように、JSON フィルター データを含むHttpPost (ただし、AJAX投稿ではない) を送信します。JQuery の $.ajax または $.post は使用できません。これは、データがコールバックで返され、ブラウザーが処理するダウンロードとして返されないためです。

タグと送信ボタンを試してみましたが、StackOverflow を検索すると、JSON 本文ではなく、名前と値のペアとしてのデータの送信のみがサポートされていることがわかりました。あなたが違うことを知らない限り?

最も簡単な方法は、非表示のコントロールでエンコードされた JSON の内容を使用して、単一の非表示の入力フィールドを使用し、サーバーでこれを手動で逆シリアル化することでしょうか?

4

1 に答える 1

1

html フォームを追加し、オブジェクトをループ処理して、名前と値のペアをフォームに追加することができます。

var query = {},
    $form = $("<form>")
    .attr("method", "post")
    .attr("action", 'pathtoservice');

$.each(query, function (name, value) {
    if (typeof (value) === "number" || typeof (value) === "string") {
        $("<input type='hidden'>")
            .attr("name", name)
            .attr("value", value)
            .appendTo($form);
    }
    else if (typeof (value) === "object") {
        $.each(value, function (i, item) {
            $("<input type='hidden'>")
                    .attr("name", name)
                    .attr("value", item)
                    .appendTo($form);
        });
    }
});

$form.appendTo("body");
$form.submit();
于 2013-02-12T15:08:59.053 に答える