参数数据Null Ajax到MVC控制器

时间:2018-04-11 10:57:17

标签: javascript c# jquery ajax asp.net-mvc

最初,我通过Ajax将一个参数传递给我的MVC控制器并且它正常工作。正在接收参数数据而没有任何问题。但是,我现在需要传递一个额外的参数,当我这样做时,两个参数都没有向Controller发送数据?谢谢!

Ajax代码:

        function uploadFile() {
        var fileData = new FormData($(form1)[0]); //THIS IS A FILE UPLOAD
        var details = JSON.stringify(markers); //MARKERS IS AN ARRAY

        $.ajax({
            url: '../Home/FilePost',
            type: 'Post',
            success: function (result) {
                var newWindow = window.open('LasView?fileName=' + result, "", "new window");

            },
            error: function (xhr, status, error) {
                alert(xhr.responseText);
            },
            xhr: function () {  // Custom XMLHttpRequest
                var myXhr = $.ajaxSettings.xhr();
                if (myXhr.upload) { // Check if upload property exists
                    // TODO...
                }
                return myXhr;
            },
            error: function () { },
            data: { filePost: fileData, googleMarkers: details },
            cache: false,
            contentType: false,
            processData: false
        });
    }

我的控制器:

[HttpPost]
public string LasPost(HttpPostedFileBase filePost, string googleMarkers){
return something;
}

我的阵列:

 var markerObject = {
     lat: marker.position.lat(),
     lng: marker.position.lng()
    };
     markers.push(markerObject);

1 个答案:

答案 0 :(得分:1)

您无法混合FormData和对象。您必须.append() FormData个实例的每个名称/值对。

因为您对数组进行了字符串化并绑定了string googleMarkers参数,所以您的代码需要

function uploadFile() {
    var fileData = new FormData($(form1)[0]); //THIS IS A FILE UPLOAD
    var details = JSON.stringify(markers); //MARKERS IS AN ARRAY

    fileData.append('googleMarkers', details); // append the name/value pair
    $.ajax({
        ....
        data: fileData, // send only the FormData instance
        ....
    });
})

但是,您应该利用MVC的模型绑定功能并发布绑定到表示坐标的模型的数据,例如

public class Coordinate
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

然后POST方法

[HttpPost]
public string LasPost(HttpPostedFileBase filePost, IEnumerable<Coordinate> googleMarkers)

并发送该数据

var fileData = new FormData($(form1)[0]);
for(var i = 0; i < markers.length; i++)
{
    fileData.append('[' + i + '].Latitude', markers[i].lat);
    fileData.append('[' + i + '].Longitude', markers[i].lng);   
}
$.ajax({
    ....
    data: fileData,
    ....
});