Передайте пользовательский объект в 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. Свойства сопоставляются, включая случай.

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

    Из этого мы можем получить доступ к значениям.

    Надеюсь, это даст вам некоторые рекомендации.

    Interesting Posts

    Нет доступа к информации о сеансе через концентратор SignalR. Является ли мой дизайн неправильным?

    HTTP GET в VBS

    Как найти количество дней между двумя датами / DateTimePickers

    Использование Spring, сопоставление с root в web.xml, статические ресурсы не найдены

    Установка позиции курсора в консольном приложении Win32

    В чем разница между PermGen и Metaspace?

    Что означает `rep ret`?

    Несколько веб-серверов за одним брандмауэром

    Использование SHA1 и RSA с java.security.Signature против MessageDigest и Cipher

    В ClearCase, как я могу просмотреть старую версию файла в статическом представлении из командной строки?

    Удалить значок Spotlight из строки меню

    Что делать, если жесткий диск разделен на более чем 26 разделов в Windows?

    Mac Lion OS X – я удалил файлы, но свободное место на диске не увеличилось

    Могу ли я просматривать Windows App Store за пределами Windows 8?

    Получение сообщения консоли: ipc_kmsg_copyout_header: невозможно увеличить пространство пользователя ipc. Любые Mac-серверы Mac OS X здесь?

    Давайте будем гением компьютера.