使用jQuery.post将多个参数发布到MVC Controller

Ash*_*h M 6 asp.net-mvc jquery

我有一个控制器定义为:

        [AcceptVerbs(HttpVerbs.Post)]
        public JsonResult PostMoreData(DataContracts.Address address, DataContracts.GeoLocation geoLocation)
        {
            return Json("test");
        }

where DataContracts.Address and DataContracts.GeoLocation are complex types.

从我的视图我试图使用jQuery发布如下:

        function PostMoreData() {

            var JsonAddress = {

                "Building": $('Building').val(),
                "UnitNumber": $('UnitNumber').val(),
                "StreetNumber": $('StreetNumber').val(),
                "StreetName": $('StreetName').val(),
                "StreetType": $('StreetType').val(),
                "Suburb": $('Suburb').val(),
                "State": $('State').val(),
                "Postcode": $('Postcode').val(),
                "MonthsAtAddress": $('MonthsAtAddress').val()

            };

            var JsonGeoLocation = {
                "Latitude": $('Latitude').val(),
                "Longitude": $('Longitude').val()
            };


            jQuery.post("/AddressValidation/PostMoreData", {address: JsonAddress, geoLocation: JsonGeoLocation}, function(data, textStatus) {
                if (textStatus == "success") {
                    var result = eval(data);
                    if (result.length > 0) {
                        alert(result);
                    }
                }
            }, "json");
        } 

但是,在控制器上,我得到空值.


它可以工作,如果我的控制器只需要一个参数,我只发布一个对象.

        [AcceptVerbs(HttpVerbs.Post)]
        public JsonResult PostMoreData(DataContracts.Address address)
        {
            return Json("test");
        }
        function PostMoreData() {

            var JsonAddress = {

                "Building": $('Building').val(),
                "UnitNumber": $('UnitNumber').val(),
                "StreetNumber": $('StreetNumber').val(),
                "StreetName": $('StreetName').val(),
                "StreetType": $('StreetType').val(),
                "Suburb": $('Suburb').val(),
                "State": $('State').val(),
                "Postcode": $('Postcode').val(),
                "MonthsAtAddress": $('MonthsAtAddress').val()

            };


            jQuery.post("/AddressValidation/PostMoreData", JsonAddress, function(data, textStatus) {
                if (textStatus == "success") {
                    var result = eval(data);
                    if (result.length > 0) {
                        alert(result);
                    }
                }
            }, "json");
        } 

任何想法如何我可以发布多个对象?

Ash*_*h M 3

感谢大家对此问题的意见。

在这个阶段,我们已经不再使用 jquery 将复杂类型发布到控制器。相反,我们使用 ms ajax 框架来做到这一点。ms ajax post 很好地自动绑定了开箱即用的复杂类型。

所以我们的解决方案现在使用 jquery 和 ms ajax 框架的混合。

  • 您可以发布一些示例代码或文章参考,以便我们跟随您的脚步吗?我遇到了类似或可能相同的问题,但您的答案并没有那么有帮助,因为我现在需要更具体地弄清楚要从 ms ajax 框架的哪些部分开始尝试前进。 (7认同)