por example enviar jquery ajax asp.net-mvc json

jquery - example - Enviar datos JSON a través de POST(ajax) y recibir respuesta json del controlador(MVC)



send json ajax to php (5)

Creé una función en javascript así:

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 archivo de script jquery.json-2.3.min.js y lo usé para el toJSON(array) .

En el controlador, tengo esta acción Add

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

Pero sendInfo como parámetro de método se vuelve nulo.

El modelo:

public struct PersonSheets { public int Id; public string Name; public string Address; public string Phone; } public class PersonModel { private List<PersonSheets> _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; } }

¿Cómo podría hacerlo en el método de acción cuando los datos se enviaron con POST?

No se como usar Además, ¿es posible devolver la respuesta (a ajax) a través de JSON?

Gracias


Crea un modelo

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

Controladores como abajo

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

<script type="text/javascript"> function send() { var person = { name: $("#id-name").val(), address:$("#id-address").val(), phone:$("#id-phone").val() } $(''#target'').html(''sending..''); $.ajax({ url: ''/test/PersonSubmit'', type: ''post'', dataType: ''json'', success: function (data) { $(''#target'').html(data.msg); }, data: person }); } </script>


No necesita llamar $.toJSON y agregar traditional = true

data: { sendInfo: array }, traditional: true

haría.


Su PersonSheets tiene una propiedad int Id , Id no está en la publicación, por lo que la vinculación del modelo falla. Haga Id nullable (int?) O envíe atleast Id = 0 con el POst.


Use JSON.stringify(<data>) .

Cambia tu código: data: sendInfo a data: JSON.stringify(sendInfo) . Espero que esto le pueda ayudar.


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

y en acción

public ActionResult AddDomain(IEnumerable<PersonSheets> SendInfo){ ...

puedes unir tu matriz como esta

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

Espero que esto le pueda ayudar.