通过Ajax使用FormData将超过1的值传递给webmethod

时间:2016-06-01 04:29:06

标签: 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: "/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'是null,但在引用文件时我能够获得它的值。

虽然在网上搜索我的印象是你可以指定在使用这种方法时需要多少键/值,除非我被误导了?有人可以说明为什么这两个参数为空?提前谢谢。

2 个答案:

答案 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);
            }

        });

尝试使用这种方式。

答案 1 :(得分:1)

li:hover

<强>控制器:

li