使用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"}
从这里我们可以访问这些值。
我希望这会给你一些指导。