4

だから、私は MVC 4 アプリケーション内で FineUploader 3.3 を使用しています。今、私はそれを正しく機能させる必要があります。

私は MVC を初めて使用し、JSON を返すのはまったく初めてなので、これを機能させるには助けが必要です。これが私が使用しているもので、すべてdoc.ready.

var manualuploader = $('#files-upload').fineUploader({
request:
{
    endpoint: '@Url.Action("UploadFile", "Survey")',
    customHeaders: { Accept: 'application/json' },
    params: {
        //variables are populated outside of this code snippet
        surveyInstanceId: (function () { return instance; }),
        surveyItemResultId: (function () { return surveyItemResultId; }),
        itemId: (function () { return itemId; }),
        imageLoopCounter: (function () { return counter++; })
    },
    validation: {
        allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp']
    },
    multiple: true,
    text: {
        uploadButton: '<i class="icon-plus icon-white"></i>Drop or Select Files'
    },                              
    callbacks: {
        onComplete: function(id, fileName, responseJSON) {
            alert("Success: " + responseJSON.success);
            if (responseJSON.success) {
                $('#files-upload').append('<img src="img/success.jpg" alt="' + fileName + '">');
                }
            }
    }
}

編集: Internet Explorer 9 を使用していましたが、Chrome、Firefox に切り替えたところ、問題なくアップロードできました。IE9 には何が必要ですか? ブラウザに関係なく、検証は機能しません。

エンドポイントが起動し、ファイル/パラメーターが読み込まれるので、これで問題ありません! 検証は、ユーザーがこのリスト以外の何かを選択するのを止めませんが、当面はこれで作業できます。正常に保存して、アップロードで必要なことを実行できます。ただし、起動する必要はありませんOnComplete。実際、IE では、現在持っているもので OPEN/SAVE ダイアログが表示されます。

質問: onComplete( idfilenameresponseJSON) 内の関数パラメーターは、戻り時または途中で入力されますか? 私はこれについて混乱しています。JSON にこれらのパラメーターを含めて入力する必要がありますか?

私はこれを行いません (これらのパラメーターを入力します)。C# の出力メソッドはJsonResult次のように返され、「成功」を返すだけです (適切な場合)。

return Json(new { success = true });  

さらに追加する必要がありますか? この行は保存が行われた後であり、私がやりたいのは、すべてが良いかどうかをユーザーに伝えることだけです。JSONのsuccessプロパティは と一致しresponseJSON.successますか?

何が欠けているか、間違っていますか?

4

1 に答える 1

10

質問の項目に対処する:

  1. 「ファイルの選択」ダイアログ内の制限については、acceptFiles検証オプションも設定する必要があります。詳細についてはvalidation、readme のオプション セクションを参照してください。
  2. オプションvalidationのプロパティが間違った場所にあります。requestプロパティ/オプションの下にあってはなりません。text、、multipleおよびcallbacksオプション/プロパティについても同じことが言えます。また、jQuery プラグインのコールバックを正しく設定していません。
  3. IE の開く/保存ダイアログは、サーバーが正しい「Content-Type」ヘッダーを含む応答を返さないために発生します。応答の Content-Type は「text/plain」である必要があります。詳細については、サーバー側の readmeを参照してください。
  4. JSON.parseサーバーが応答で返すものはすべて、クライアント側で応答を処理するときに使用する Fine Uploader によって解析されます。JSON.parseサーバーの応答に対する呼び出しの結果は、responseJSONパラメーターとしてonCompleteコールバック ハンドラーに渡されます。クライアント側で表示したいテキストや、アップロードされたファイルの新しい名前など、サーバーからクライアント側のコードに特定の情報を渡したい場合は、適切なプロパティをサーバーの応答。onCompleteこのデータは、ハンドラーで利用できるようになります。これが必要ない場合は、現在返されている「成功」応答を返すだけでかまいません。私がリンクしたサーバー側の readme には、これらすべてに関する詳細情報が記載されています。

#2 で述べたことを明確にするために、コードは次のようになります。

$('#files-upload').fineUploader({
   request: {
       endpoint: '@Url.Action("UploadFile", "Survey")',
       customHeaders: { Accept: 'application/json' },
       params: {
           //variables are populated outside of this code snippet
           surveyInstanceId: (function () { return instance; }),
           surveyItemResultId: (function () { return surveyItemResultId; }),
           itemId: (function () { return itemId; }),
           imageLoopCounter: (function () { return counter++; })
       }
   },
   validation: {
       allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp']
   },
   text: {
       uploadButton: '<i class="icon-plus icon-white"></i>Drop or Select Files'
   }
})
   .on('complete', function(event, id, fileName, responseJSON) {
       alert("Success: " + responseJSON.success);
       if (responseJSON.success) {
          $('#files-upload').append('<img src="img/success.jpg" alt="' + fileName + '">');
       }
   });                              
于 2013-03-12T18:46:30.483 に答える