2016-06-01 6 views
0

を経由しているFormDataを使用してWebMethodのためにもっとそして1つの値を渡す:私はここに示されているように私のAjaxメソッドからいるFormDataメソッドを使用して自分のWebサービスにアップロードされた画像+ 2つの追加パラメータを渡すためにしようとしているのAjax

var formData = new FormData(); 
    formData.append('file', $('#photo')[0].files[0]); 
    formData.append('u', "test"); 
    formData.append('s', "Testing"); 

私のAJAX呼び出しがそうのように概説されています

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string UploadImage() 
    { 

     if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any()) 
     { 
      var t= System.Web.HttpContext.Current.Request.Files["s"]; 
      var c= System.Web.HttpContext.Current.Request.Files["u"]; 
      var p = System.Web.HttpContext.Current.Request.Files["file"]; 
     } 
     else 
     { 
      return "Error"; 
     } 

     return "Error"; 
    } 

問題I:このWebメソッドを呼び出します

 $.ajax({ 
      url: "/admin/WebService/test.asmx/UploadImage", 
      type: "POST", 
      processData: false, 
      contentType: false, 
      data: formData, 
      success: function (response) { 
       console.log(response); 
      }, 
      error: function (er) { 
       alert(er); 
      } 

     }); 

'm'はパラメータ 'u'と 's'がnullですが、ファイルを参照するとその値を取得できます。

ウェブを検索している間に私は誤解されていない限り、このアプローチを使用する際に必要な多くのキー/値を指定できますか?誰かがこれらの2つのパラメータがヌルである理由を説明してください。前もって感謝します。

答えて

1
This works for me: 


var formData = new FormData(); 
      formData.append("UserId", userId);    
      formData.append("RequestPhoto", imageFile); 
      formData.append("RequestVoiceRecord", voiceFile); 
      formData.append("Latitude", latitude); 
      formData.append("Longitude", longtitude); 

     $.ajax({ 
      type: "POST", 
      url: "/User/CreateRequest", 
      data: formData, 
      contentType: false, 
      processData: false, 

      success: function() { 
       alert("OK"); 
      }, 
      error: function() { 
       alert("Error"); 
      } 

     }); 

コントローラー:

public class UserController : ApiController 
    {   

     [HttpPost] 
     public int CreateRequest() 
     { 

      // HttpResponseMessage result = null; 
      var httpRequest = HttpContext.Current.Request; 

      var req = new UserRequest 
      { 
       UserId = Guid.Parse(httpRequest.Form["UserId"]),          
       Photo = httpRequest.Files["RequestPhoto"], 
       VoiceRecord = httpRequest.Files["RequestVoiceRecord"] 
       Latitude = float.Parse(httpRequest.Form["Latitude"]), 
       Longitude = float.Parse(httpRequest.Form["Longitude"]), 
      }; 
+0

私のために働いた、ありがとう –

1

これを作成する代わりにjsonを作成し、ajax経由で送信するキーを追加してください。

var formData = {'u':'value','s':'value'} 

$.ajax({ 
      url: "/admin/WebService/test.asmx/UploadImage", 
      type: "POST", 
      processData: false, 
      contentType: false, 
      data: JDON.Stringify(formData), 
      success: function (response) { 
       console.log(response); 
      }, 
      error: function (er) { 
       alert(er); 
      } 

     }); 

この方法を試してください。

+0

私はあなたが指定したものと一致するために私のコードを変更したが、しかし、今、私は外の値を引っ張って行くだろうか、キーを設定していませんよWebサービス内のformDataそれは自己ですか? –

+0

サービスからの応答がありますか?あなたのブラウザのコンソールを開いて、それが応答で何を返すかチェックしてください。 –

関連する問題