2016-06-01 44 views
0

我试图使用FORMDATA到上传的图片传+两个额外的参数使用FORMDATA方法从我的Ajax方法,我的Web服务的WebMethod这里:传递更多然后1点的值通过Ajax

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

我的Ajax调用概述如下所示:

 $.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); 
      } 

     }); 

调用该的WebMethod:

[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"; 
    } 

的问题,我'm have是参数'u'和's'在引用文件时我能够得到它的值。

在搜索网页的同时,我在印象之下可以指定使用此方法时需要的许多键/值,除非我误导了信息?有人可以请说明为什么这两个参数为空?提前致谢。

回答

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

你从服务中获得回应。打开你的浏览器的控制台,并检查它返回什么回应? –