15

我正在尝试将一些简单的 JSON 从 jQuery 传递给 ASP.NET 4.5 Webmethod。它并没有按照我想要的方式工作。如果我接受输入作为单独的参数,它会起作用:

[WebMethod]
public static Address GetJSonAddress(string name, string street)

但是,如果我尝试将它作为一个对象它不起作用,那么传入的内容就是 null:

[WebMethod]
public static Address GetJSonAddress(Address newAddress)

我已经使用 DataContractJsonSerializer 尝试了 Webmethods、Pagemethods、WCF ......什么都没有。Address 类使用 Datamember/DataContract 进行了适当的修饰。属性匹配,包括大小写。

jQuery,我在其中尝试了各种传递数据的方式,包括将其包装在 Address 对象中......如果我以任何其他方式而不是我所拥有的方式执行此操作,则不会调用 Webmethod 并且我收到错误 500:

Save2 = function () {
var address = { prefix: GLOBALS.curr_prefix };

$('input[id^=' + GLOBALS.curr_prefix + '],select[id^=' + GLOBALS.curr_prefix + ']').each(function () {
       address[this.id.substr(4)] = $.trim($(this).val());
})

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/WebServices/Insert",
    data: JSON.stringify(address),
    dataType: "json",
    success: function (data, textStatus) {
        console.log(data, textStatus);
    },
    failure: function (errMsg) {
        MsgDialog(errMsg);
    }
});
}

最终我将不得不使用 121 个输入字符串来执行此操作,并且真的不希望有一个具有 121 个参数的方法。任何帮助表示赞赏。

4

2 回答 2

43

我很快建立了这个项目,并且能够成功调用我的 web 方法,请相应地调整您的代码。确保您的类属性名称与您通过 JavaScript 传递的属性名称相同。

网络服务

    public static Contact getContact(Contact cnt)
    {
        cnt.name = "Abijeet Patro";
        cnt.phone = "Blah Blah";
        return cnt;
    }

JavaScript/jQuery

    $(document).ready(function () {
        var cnt = {name:'Hello',phone:'Hello'};
        $.ajax({
            type: "POST",
            url: "/Default.aspx/getContact",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: JSON.stringify({'cnt':cnt}), // Check this call.
            success: function (data) {
                debugger;
            }
        });
    });

班级

public class Contact
{
    public string name { get; set; }
    public string phone { get; set; }
}

调用的 Web 服务


在此处输入图像描述

您可以从这里获取项目。也请使用 fiddler 或 Chrome 来监控 AJAX 请求/响应。我添加了一张图片来展示如何使用 Chrome 监控 AJAX 请求。Fiddler 更好更详细。


在此处输入图像描述

于 2013-08-06T11:57:40.957 回答
-1

I am not aware of ASP.但在 Ruby on Rails 中,我们使用以下过程。我的表格有近 20 个字段。通过serializeArray();我可以将所有输入字段值发送到控制器。喜欢

HTML应该看起来像

<input class="input" id="violation_date" type="text" name="violation_date" value=""/>

"name"字段在这里很重要。

var form = $("form#driver_info_form").serializeArray();
var hsh = { }
$.each(form, function(i, e) {
            hsh[e.name] = e.value
        });

var jqxhr = $.post("/app/DriverInfo/save_driver_info", {
            hsh: hsh
        }, function() { });

在控制器方面,我们可以获得类似的参数

{"hsh"=>{"violation_date"=>"date", "violation_time"=>"time", "violation_day"=>"week", "username"=>"name", "address"=>"address", "city"=>"city", "state"=>"state", "zip"=>"", "driver_lic_number"=>"123324", "radio_commercial"=>"Yes", "age"=>"", "birth_date"=>"", "sex"=>"", "hair"=>"", "eyes"=>"", "height"=>"", "weight"=>"", "race"=>""}, "accident_check"=>"false", "misdemeanor"=>"false", "traffic"=>"false", "non_traffic"=>"false", "commercial"=>"Yes"}

从这里我们可以访问这些值。

我希望这会给你一些指导。

于 2013-08-06T11:46:28.103 回答