2017-02-26 10 views
0

私は画像ファイルをASP.NET MVCコントローラに渡しますが、HttpPostedFileBaseはnullです。image: imageJSON.stringify({})の外に入力しますが、機能しません。 また、私はcontentTypeを変更し、これを参照してくださいquestionと答えを使用して、私の問題は修正されていません。JSONでファイルを送信するajaxリクエストのデータ

のAjaxコード:

var file_data = $("#Image").prop("files")[0]; 
var image = new FormData(); 

image.append("file", file_data); 

$.ajax({ 
     url: '@postUrl', 
     method: "POST", 
     contentType: 'application/json', 
     data: 
      JSON.stringify({ 
        image: image, 
        isFirst : true, 
        ExternalProjects: ExternalProjects, 
        // more data 

      }) 
     }) 

コントローラ

public virtual async Task<ActionResult> CreatePrfile(CreateFreelancerProfileViewModel viewModel, bool isFirst, HttpPostedFileBase image) 
{ 
    // more code 
} 

答えて

2

あなたはオブジェクト内FormDataインスタンスを入れて、それを文字列化しないでください。あなたは反対を行います:あなたのファイルと他のデータをFormDataインスタンスに入れます。

あなたがリンクした答えは、contentTypeprocessDataのオプションをfalseに変更してjQueryにデータ自体を処理させないように指示します。 isFirstfile、およびExternalProjects

+0

おかげであなたの答え:

var file_data = $("#Image").prop("files")[0]; var fd = new FormData(); fd.append("file", file_data); fd.append("isFirst", true); fd.append("ExternalProjects", ExternalProjects); $.ajax({ url: '@postUrl', method: "POST", contentType: false, processData: false, data:fd }); 

あなたのデータは、それぞれのフィールドになります。このエラーが発生しました: 'Uncaught TypeError:Illegal invocation' –

+0

@SoheilAlizadeh、oopsは、誤って' false'という文字列を作成し、実際のブール値 'false'を作成しませんでした。 'false'の回りに引用符を削除するだけで、更新された答えが反映されます –

関連する問題