Передайте пользовательский объект в ASP.NET Webmethod из jQuery, используя JSON
Я пытаюсь передать простой JSON в ASP.NET 4.5 Webmethod из jQuery. И он работает не так, как я хочу. Он работает, если я принимаю входы как отдельные параметры:
[WebMethod] public static Address GetJSonAddress(string name, string street)
Но если я попытаюсь взять его как объект, это не сработает, то, что передается, просто null:
[WebMethod] public static Address GetJSonAddress(Address newAddress)
Я пробовал Webmethods, Pagemethods, WCF, используя DataContractJsonSerializer … ничего. Класс Address оформлен соответствующим образом с помощью Datamember / DataContract. Свойства сопоставляются, включая случай.
- Вызов «WebMethod» с jQuery в ASP.NET WebForms
- «Недопустимый примитив JSON» в обработке Ajax
- Вызовите нестатический метод на стороне сервера с клиентской стороны с помощью JavsScript
- jQuery AJAX вызов ASP.NET WebMethod
- ASP.NET Вызов WebMethod с jQuery AJAX «401 (несанкционированный)»
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 параметром. Любая помощь приветствуется.
Я быстро создал этот проект, и мне удалось успешно позвонить по моему веб-методу, пожалуйста, скорректируйте свой код соответствующим образом. Убедитесь, что ваши имена свойств classов такие же, как те, которые вы передаете через 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; } }
Здесь вы можете захватить проект. Также, пожалуйста, используйте скрипач или Chrome для мониторинга запросов / ответов AJAX. Я добавил изображение, чтобы показать, как контролировать запросы AJAX с помощью Chrome. Скрипач еще лучше и детализирован.
I am not aware of ASP.
Но в Ruby on Rails мы используем следующую процедуру. Моя форма имеет около 20 полей. Через serializeArray();
Я могу отправить все значения полей ввода в controller. подобно
Ваш HTML
должен выглядеть так:
"name"
поле "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() { });
На стороне controllerа мы можем получить param как
{"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"}
Из этого мы можем получить доступ к значениям.
Надеюсь, это даст вам некоторые рекомендации.