使用JSON将用户定义的对象从jQuery传递给ASP.NET Webmethod

我试图从jQuery传递一些简单的JSON到ASP.NET 4.5 Webmethod。 它并没有像我想要的那样工作。 如果我接受输入作为单独的参数,它的工作原理:

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

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

 [WebMethod] public static Address GetJSonAddress(Address newAddress) 

我尝试过Webmethods,Pagemethods,WCF使用DataContractJsonSerializer ……没什么。 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个参数的方法。 任何帮助表示赞赏。

我快速设置了这个项目,并且我能够成功调用我的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; } } 

网络服务被叫


在此处输入图像描述

你可以从这里获取项目。 另外,请使用fiddler或Chrome来监控AJAX请求/响应。 我添加了一个图像来展示如何使用Chrome监控AJAX请求。 提琴手更好,更细致。


在此处输入图像描述

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

你的HTML应该是这样的

  

"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"} 

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

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