通过Ajax使用FormData向webmethod传递超过1个值

通过Ajax使用FormData向webmethod传递超过1个值,ajax,asmx,webmethod,form-data,Ajax,Asmx,Webmethod,Form Data,我试图使用Ajax方法中的FormData方法将上传的图像+两个附加参数传递给我的web服务,如下所示: var formData = new FormData(); formData.append('file', $('#photo')[0].files[0]); formData.append('u', "test"); formData.append('s', "Testing"); 我的ajax调用概述如下: $.ajax({ url:

我试图使用Ajax方法中的FormData方法将上传的图像+两个附加参数传递给我的web服务,如下所示:

  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";
    }
我遇到的问题是参数'u'和's'为空,但在引用文件时,我能够获得其值


在搜索网页时,我觉得你可以在使用这种方法时指定尽可能多的键/值,除非我被误导了?有人能解释一下为什么这两个参数是空的吗?提前感谢。

您应该创建一个
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);
            }

        });

尝试使用这种方式。

你应该创建一个
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);
            }

        });
试着用这种方法。

这对我很有用:

JavaScript

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"]),
            };
这对我很有用:

JavaScript

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"]),
            };

我已经更改了代码以匹配您指定的内容,但是现在我没有设置键,我将如何在webservice it self中从formData中提取值?您是否收到服务的响应。打开浏览器的控制台,检查它返回的响应是什么?我已经更改了代码以匹配您指定的内容,但是现在我没有设置键,如何从Web服务it自身中的formData中提取值?您是否从服务获得响应。打开浏览器的控制台,检查它返回了什么响应?也为我工作,谢谢也为我工作,谢谢