2016-11-01 7 views
0

フォームポストを受け取るべき単純なC#ジェネリックハンドラをやっています。ここにフォームがあります...C#ジェネリックハンドラがポストからデータを取得しない

<form id="frmUploadImage" action="../Handlers/LocalImageUploadHandler.ashx" method="post" style="display: none"> 
    <div> 
     <input style="display: none; margin-bottom: 20px" type="file" id="uploadImage" /> 
    </div> 
</form> 

私は、ボタンをクリックすると入力のクリックイベントを呼び出すコードをいくつか持っています。入力がロードされると、以下が呼び出されます(ブレークポイントを設定することができます)。

var jqxhr = $.post('../Handlers/LocalImageUploadHandler.ashx', $('#frmUploadImage').serialize()) 
      .success(function() { 
       alert('worked'); 
      }) 
      .error(function() { 
       alert('failed'); 
      }); 

「失敗」のアラートが表示されます。サーバーサイドでは、ハンドラでこれを呼び出しています(ブレークポイントを設定して呼び出すことができます)。面白いのは何

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "application/octet-stream"; 
     var file = Convert.FromBase64String(context.Request.Form["uploadedFile"]); 
//other stuff 
} 

はcontext.Request.Formとcontext.Request.Files性質は、それらが送信されているにもかかわらず、その中には何もありませんということです。私がやったことは何も働いていません。私はXHR、jQueryなどで投稿しようとしました。DataUrlとしてファイルアップロードコントロールからデータを引き出し、base64でエンコードされた文字列にシリアル化してajax呼び出しに入れようとしました。ハンドラは投稿を受信しますが、データは削除されています。

+1

ますinput要素に 'name'属性を与える必要があるかもしれません。 –

答えて

0

あなたはそれ作業 ユーザー側のコード $( '#btnUpload')作るために、次のコードをトライアウトする必要があります。(関数を(クリック){

var fileUpload = $("#FileUpload1").get(0); 
var files = fileUpload.files; 
var test = new FormData(); 
for (var i = 0; i < files.length; i++) { 
test.append(files[i].name, files[i]); 
} 
$.ajax({ 
url: "LocalImageUploadHandler.ashx", 
type: "POST", 
contentType: false, 
processData: false, 
data: test, 
// dataType: "json", 
success: function (result) { 
alert(result); 
}, 
error: function (err) { 
alert(err.statusText); 
} 
}); 
}); 

サーバーサイドコード

public void ProcessRequest (HttpContext context) { 
if (context.Request.Files.Count > 0) 
{ 
HttpFileCollection files = context.Request.Files; 
for (int i = 0; i < files.Count; i++) 
{ 
HttpPostedFile file = files[i]; 
string fname; 
if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER") 
{ 
string[] testfiles = file.FileName.Split(new char[] { '\\' }); 
fname = testfiles[testfiles.Length - 1]; 
} 
else 
{ 
fname = file.FileName; 
} 
fname=Path.Combine(context.Server.MapPath("~/uploads/"), fname); 
file.SaveAs(fname); 
} 
} 
context.Response.ContentType = "text/plain"; 
context.Response.Write("File Uploaded Successfully!"); 
} 
public bool IsReusable { 
get { 
return false; 
} 
} 
関連する問題