2

AJAXを使用してASP.NETにファイルをアップロードしようとしています。私はこのJavascriptを持っています:

var xhr = new XMLHttpRequest();

for (var i = 0; i < files.length; i++) {
   xhr.open('post', '/File/Upload', true);
   xhr.setRequestHeader("Content-Type", "multipart/form-data");
   var formData = new FormData();
   formData.append("_file", files[i]);
   xhr.send(files[i]);
}

filesArray()

次に、C#コードで投稿ファイルにアクセスしようとしますが、値は常にnullです。この問題を解決するにはどうすればよいですか?

// Method 1, Result: file = null
HttpPostedFileBase file = Request.Files["_file"];

// Method 2, Result: postedFile.Count = 0
HttpFileCollectionBase postedFile = Request.Files;
4

2 に答える 2

3

ファイル入力フィールドを含む次のフォームがあると仮定します。

<form action="/home/index" method="post" enctype="multipart/form-data" onsubmit="return handleSubmit(this);">
    <input type="file" id="_file" name="_file" multiple="multiple" />
    <button type="submit">OK</button>
</form>

次の機能を試すことができます。

function handleSubmit(form) {
    if (!FormData) {
        alert('Sorry, your browser doesn\'t support the File API => falling back to normal form submit');
        return true;
    }

    var fd = new FormData();
    var file = document.getElementById('_file');
    for (var i = 0; i < file.files.length; i++) {
        fd.append('_file', file.files[i]);
    }

    var xhr = new XMLHttpRequest();
    xhr.open(form.method, form.action, true);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            alert(xhr.responseText);
        }
    };
    xhr.send(fd);

    return false;
}

これで、サーバー上で。を使用してファイルを取得できるようになりますRequest.Files

于 2012-10-04T11:52:32.417 に答える
0

jQueryも使えます


Ajaxの2 つの機能 あります : http://api.jquery.com/jQuery.ajax/ com/jquery/jquery_ajax.asp編集日 : 2012-10-04 16:31理由: 以下のコメントをいただきました コメント :うーん、わからないならサーバーの情報を読み込みたくない、情報を取得したいサーバー上のJSコードに含まれています。ファイル Array() で送信する情報が既にあります。– エルファイエ





あなたがすることは、Web サービスのようにサーバーに AJAX 呼び出しを行うことです。ここに例があります

var value = 1;
var handlerUrl = [YOUR WEBSERVICE URL];

//Do the Ajax Call
jQuery.ajax({
  url: handlerUrl,
  data: { "params[]": [value] },
  type: 'POST',
  success: function (data)
  {
     alert("succes");
  },
  error: function (jxhr, msg, err)
  {
     alert("error");
  }
});

data パラメーターで、データを指定します。
ここでは配列の形で送信していますが、1 つのパラメーターのように送信することもできます。私の場合、一般的なハンドラーでどのようにアクセスしますか。

//Split the parameters and set in Array of Strings
var param = context.Request.Form[0].Split(',');
var value = param[0];

私が言ったように、私はそれを配列の形で与えるので、1 つのパラメーターしか持たず
、それを分割します。ただし、単一のプロパティのように指定すると、次
のように取得できます。

context.Request.Form[0]
context.Request.Form[1]
context.Request.Form[2]
context.Request.Form[3]
context.Request.Form[4]
于 2012-10-04T12:53:32.973 に答える