通过POST(ajax)发送JSON数据并从Controller(MVC)接收json响应
我在javascript中创build了一个函数:
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
脚本文件,并将其用于toJSON(array)
方法。
在控制器中,我有这个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<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; } }
数据与POST一起发送时,如何在action方法中做到这一点?
我不知道如何使用。 此外,有可能通过JSON发送回应(到Ajax)?
谢谢
创build一个模型
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
<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>
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<PersonSheets> 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>)
。
将您的代码: data: sendInfo
更改为data: JSON.stringify(sendInfo)
。 希望这可以帮助你。
你的PersonSheets有一个属性int Id
, Id
不在post中,所以modelbinding失败。 使Id为空(int?)或使用POst至less发送Id = 0。
您不需要调用$.toJSON
并添加traditional = true
data: { sendInfo: array }, traditional: true
会做。