Отправьте данные JSON через POST (ajax) и получите ответ json от Controller (MVC)

Я создал функцию в javascript:

function addNewManufacturer() { var name = $("#id-manuf-name").val(); var address = $("#id-manuf-address").val(); var phone = $("#id-manuf-phone").val(); var sendInfo = { Name: name, Address: address, Phone: phone }; $.ajax({ type: "POST", url: "/Home/Add", dataType: "json", success: function (msg) { if (msg) { alert("Somebody" + name + " was added in list !"); location.reload(true); } else { alert("Cannot add to list !"); } }, data: sendInfo }); } 

Я вызвал jquery.json-2.3.min.js сценария jquery.json-2.3.min.js и я использовал его для toJSON(array) .

В controllerе у меня есть действие Add

 [HttpPost] public ActionResult Add(PersonSheets sendInfo) { bool success = _addSomethingInList.AddNewSomething( sendInfo ); return this.Json( new { msg = success }); } 

Но sendInfo как параметр метода становится null.

Модель:

 public struct PersonSheets { public int Id; public string Name; public string Address; public string Phone; } public class PersonModel { private List _list; public PersonModel() { _list= GetFakeData(); } public bool AddNewSomething(PersonSheets info) { if ( (info as object) == null ) { throw new ArgumentException( "Person list cannot be empty", "info" ); } PersonSheets item= new PersonSheets(); item.Id = GetMaximumIdValueFromList( _list) + 1; item.Name = info.Name; item.Address = info.Address; item.Phone = info.Phone; _list.Add(item); return true; } } 

Как я могу сделать в методе действия, когда данные были отправлены с помощью POST?

Я не знаю, как использовать. Кроме того, можно отправить ответ (в ajax) через JSON?

спасибо

Создать модель

 public class Person { public string Name { get; set; } public string Address { get; set; } public string Phone { get; set; } } 

Контроллеры вроде ниже

  public ActionResult PersonTest() { return View(); } [HttpPost] public ActionResult PersonSubmit(Vh.Web.Models.Person person) { System.Threading.Thread.Sleep(2000); /*simulating slow connection*/ /*Do something with object person*/ return Json(new {msg="Successfully added "+person.Name }); } 

Javascript

  
 var SendInfo= { SendInfo: [... your elements ...]}; $.ajax({ type: 'post', url: 'Your-URI', data: JSON.stringify(SendInfo), contentType: "application/json; charset=utf-8", traditional: true, success: function (data) { ... } }); 

и в действии

 public ActionResult AddDomain(IEnumerable SendInfo){ ... 

вы можете связать свой массив следующим образом

 var SendInfo = []; $(this).parents('table').find('input:checked').each(function () { var domain = { name: $("#id-manuf-name").val(), address: $("#id-manuf-address").val(), phone: $("#id-manuf-phone").val(), } SendInfo.push(domain); }); 

надеюсь, это может вам помочь.

Используйте JSON.stringify() .

Измените свой код: data: sendInfo на data: JSON.stringify(sendInfo) . Надеюсь, это может вам помочь.

У вашего PersonSheets есть свойство int Id , Id не входит в сообщение, поэтому смену modelbinding не удается. Сделать Id nullable (int?) Или отправить atleast Id = 0 с POst.

Вам не нужно вызывать $.toJSON и добавить traditional = true

 data: { sendInfo: array }, traditional: true 

сделал бы.

  • Существует ли ограничение на количество JSON?
  • Как написать незакодированный Json для моего представления с помощью Razor?
  • JSON Parsing in Swift 3
  • Как генерировать и автоматически увеличивать Id с Entity Framework
  • Как использовать пользовательские ключи с протоколом Swift 4 Decodable?
  • Gson - конвертировать из Json в типизированный ArrayList
  • Как создать правильный JSONArray в Java с помощью JSONObject
  • Как разобрать / дезертизировать динамический JSON в Голанге
  • По умолчанию конструктор no-args обязателен для Gson?
  • Загрузите данные из Webservice (asmx) в jqgrid. пожалуйста, помогите мне
  • Автоматическая десериализация свойств C #
  • Давайте будем гением компьютера.