我试图将一些简单的JSON传递给来自jQuery的ASP.NET 4.5 Web方法。它并没有像我想要的那样工作。如果我接受输入作为单独的参数,它可以工作:
[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个参数的方法。任何帮助表示赞赏。
答案 0 :(得分:41)
我快速设置了这个项目,并且我能够成功调用我的网络方法,请相应地调整您的代码。确保您的类属性名称与通过JavaScript传递的类属性名称相同。
<强> web服务强>
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; }
}
您可以从here抓取该项目。另外,请使用fiddler或Chrome来监控AJAX请求/响应。我添加了一张图片来展示如何使用Chrome监控AJAX请求。提琴手更好更细致。
答案 1 :(得分:-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"}
从这里我们可以访问这些值。
我希望这会给你一些指导。