Sende JSON-Daten über POST (AJAX) und erhalte JSON-Antwort vom Controller (MVC)

Ich habe eine function in Javascript wie folgt erstellt:

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 }); } 

Ich rief jquery.json-2.3.min.js Skriptdatei an und ich verwendete es für toJSON(array) -Methode.

Im Controller habe ich diese Aktion Add

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

Aber sendInfo als Methodenparameter wird null.

Das Model:

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

Wie kann ich in Aktionsmethode arbeiten, wenn die Daten mit POST gesendet wurden?

Ich kann nicht benutzen. Es ist auch möglich, die Antwort (an Ajax) über JSON zu senden.

Vielen Dank

   

Erstellen Sie ein Modell

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

Controller wie unten

  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) { ... } }); 

und in Aktion

 public ActionResult AddDomain(IEnumerable SendInfo){ ... 

Sie können Ihr Array so binden

 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); }); 

hoffe das kann dir helfen.

Verwenden Sie JSON.stringify() .

Ändern Sie den Code: data: sendInfo in data: JSON.stringify(sendInfo) . Hoffe, das kann dir helfen.

Ihre PersonSheets haben eine Eigenschaft int Id , ID ist nicht im Post, daher schlägt Modelbinding fehl. Erstelle eine Id nullable (int?) Oder sende atleast Id = 0 mit der POst.

Sie müssen $.toJSON nicht $.toJSON und traditional = true hinzufügen

 data: { sendInfo: array }, traditional: true 

würdest du.