0

コントローラーで 2 つのメソッドを呼び出そうとしています。変換を開始するものと、変換のパーセンテージをビューに返してプログレスバーを更新するものです。変換は、getPercentage 関数が呼び出される前に「startConversion」ボタンをクリックすることにより、ポストによって開始されます。ただし、パーセンテージ関数は機能しませんが、変換のみが開始されます。最初にパーセンテージ関数を開始しようとしましたが、機能しますが、変換ボタンを押すと setTimeout が停止し、更新されなくなります。

何が間違っている可能性があり、それを修正する方法を誰かが提案していますか?

//View
<script type="text/javascript" >
    $(window).load(function () {
        startConvert();
    });

    function startConvert() {
        document.getElementById("startConversion").click()
        getPercentage();
    }

    function getPercentage() {
            $.ajax(
            {
                type: "POST",
                url: "@Url.Action("GetPercentage","File")",
                success: function (result) {
                    $('#div').html(result);
                    var r = result;
                    progressBarSim(r);
                },
                error: function (req, status, error) {
                    alert("Fail");
                }
            });
        setTimeout(getPercentage, 500);
    }

</script>

<form action="" method="post" enctype="multipart/form-data">         
    <input id="startConversion" type="Submit"  name="Convert" />
</form>

//FileController
[HttpPost]
public double GetPercentage() {
    return enc.Percent;
}

[HttpPost]
public ActionResult Convert()
{
... //Removed
}
4

2 に答える 2

0

基本的にブラウザーに新しいページをロードさせるフォームを送信しています (フォームアクションの結果が何であれ)。これが getPercentage() メソッドが呼び出されないように見える理由です。

最も簡単な方法は ajax を使用してフォームを送信することですが、ユーザーに ajax 経由では送信できないファイルをアップロードしてもらいたいようです。

したがって、フォームのターゲットをページの非表示の iframe に設定することをお勧めします。これにより、フォームがその iframe に送信されます (結果が iframe に読み込まれ、メイン ウィンドウに新しいページが読み込まれることはありません)。

つまり、次のようなものです。

  <iframe name="uploadTarget" src="" style="position:absolute;left:-9999px"></iframe>
  <form action="" method="post" enctype="multipart/form-data" target="uploadTarget">
  ... etc ...

実際のアップロードの進行状況を追跡したい場合は、http://blueimp.github.io/jQuery-File-Upload/を使用するなど、他のオプションを確認する必要があります。

編集:ajaxを使用してフォームを送信するには:

function startConvert() {
    var form = $("#startConversion").closest("form");
    $.post(form.attr('action'), form.serializeArray());
    getPercentage();
}
于 2013-04-19T08:35:39.247 に答える