如何通过 jquery ajax 将特定对象的序列发送到 Mvc 核心操作
How To Send Sequence of Specific Object To Mvc Core Action through jquery ajax
我创建了一个函数,负责创建和发送 json :
function Send(op) {
var tr = $(op).parents('tr');
var item = [];
$(tr).find("td").each(function () {
item.push($(this).find("input").prop("name") + '":' + '"' + $(this).find("input").val());
});
var myJsonString = JSON.stringify(item);
$.ajax({
url: '/Home/Edit',
data: myJsonString,
type:'post',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function () {
alert('send is okay')
}
});
}
到 IActionResult :
[HttpPost]
public ActionResult Edit([FromBody]Hazine hazine)
{
return View();
}
但它(编辑操作)无法从 jquery 获取对象。
所以此操作已成功调用,但 hazine 为空!
我从 console.log 创建的 json 是:
["id\":\"4","undefined\":\"undefined","undefined\":\"undefined","HazineType1\":\"1","HazineType2\":\"1","SendDate\":\"5","ProjectId\":\"1","Mablagh\":\"1","MablaghPaid\":\"1","HazineDate\":\"1","HazineDateLong\":\"1","HazineTitle\":\"11111","HazineComment\":\"1","ForoshgahName\":\"1","PayLastDate\":\"1","PayDateLong\":\"111111111","UniqueId\":\"1111","SaveDate\":\"8888","SaveDateLong\":\"888","SendDate\":\"5","SendDateLong\":\"5"]
怎么了?
为了使用 FromBody
将对象发送到控制器,json 字符串应该映射参数。
对于您的操作,它接受一个对象,但是对于您的 json,您发送的是一个集合对象。
尝试如下操作:
function Send(op) {
var tr = $(op).closest('tr');
var item = {};
$(tr).find("td").each(function () {
item[$(this).find("input").prop("name")] = $(this).find("input").val();
});
var myJsonString = JSON.stringify(item);
console.log(myJsonString);
$.ajax({
url: '/Home/Edit',
data: myJsonString,
type:'post',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function () {
alert('send is okay')
}
});
}
如果你使用的是.net core 3.0,你还需要通过安装Microsoft.AspNetCore.Mvc.NewtonsoftJson
来配置json序列化器,并像
那样配置
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddNewtonsoftJson();
}
public class Hazine:TableBase
{
[Key]
public string UniqueId { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int HazineId { get; set; }
public int HazineType1 { get; set; } // check paid , check
public int ProjectId { get; set; }
public int Mablagh { get; set; }
public int MablaghPaid { get; set; }
[StringLength(150)]
public string HazineDate { get; set; }
public long HazineDateLong { get; set; }
[StringLength(150)]
public string HazineTitle { get; set; }
[StringLength(350)]
public string HazineComment { get; set; }
[StringLength(150)]
public string ForoshgahName { get; set; }
[StringLength(150)]
public string PayLastDate { get; set; }
[StringLength(150)]
public long PayDateLong { get; set; }
}
public class TableBase
{
[NotMapped]
public bool isModified { get; set; }
[StringLength(150)]
public string SaveDate { get; set; }
public long SaveDateLong { get; set; }
[StringLength(150)]
public string SendDate { get; set; }
public long SendDateLong { get; set; }
}
控制台日志:
{"HazineId":"4","UniqueId":"1111","HazineType1":"1","HazineType2":"1","SendDate":"5","ProjectId":"1","Mablagh":"1","MablaghPaid":"1","HazineDate":"1","HazineDateLong":"1","HazineTitle":"11111","HazineComment":"1","ForoshgahName":"1","PayLastDate":"1","PayDateLong":"111111111","SaveDate":"8888","SaveDateLong":"888","SendDateLong":"5"}
有效:
[HttpPost]
public IActionResult Edit([FromBody]Object data)
{
Hazine hazineJson =JsonConvert.DeserializeObject<Hazine>(data.ToString());
hazine.Update(hazineJson);
return View();
}
无效:
[HttpPost]
public IActionResult Edit([FromBody]Hazine data)
{
hazine.Update(data);
return View();
}
在第二个函数中无法调用并发生错误 500
我创建了一个函数,负责创建和发送 json :
function Send(op) {
var tr = $(op).parents('tr');
var item = [];
$(tr).find("td").each(function () {
item.push($(this).find("input").prop("name") + '":' + '"' + $(this).find("input").val());
});
var myJsonString = JSON.stringify(item);
$.ajax({
url: '/Home/Edit',
data: myJsonString,
type:'post',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function () {
alert('send is okay')
}
});
}
到 IActionResult :
[HttpPost]
public ActionResult Edit([FromBody]Hazine hazine)
{
return View();
}
但它(编辑操作)无法从 jquery 获取对象。 所以此操作已成功调用,但 hazine 为空!
我从 console.log 创建的 json 是:
["id\":\"4","undefined\":\"undefined","undefined\":\"undefined","HazineType1\":\"1","HazineType2\":\"1","SendDate\":\"5","ProjectId\":\"1","Mablagh\":\"1","MablaghPaid\":\"1","HazineDate\":\"1","HazineDateLong\":\"1","HazineTitle\":\"11111","HazineComment\":\"1","ForoshgahName\":\"1","PayLastDate\":\"1","PayDateLong\":\"111111111","UniqueId\":\"1111","SaveDate\":\"8888","SaveDateLong\":\"888","SendDate\":\"5","SendDateLong\":\"5"]
怎么了?
为了使用 FromBody
将对象发送到控制器,json 字符串应该映射参数。
对于您的操作,它接受一个对象,但是对于您的 json,您发送的是一个集合对象。
尝试如下操作:
function Send(op) {
var tr = $(op).closest('tr');
var item = {};
$(tr).find("td").each(function () {
item[$(this).find("input").prop("name")] = $(this).find("input").val();
});
var myJsonString = JSON.stringify(item);
console.log(myJsonString);
$.ajax({
url: '/Home/Edit',
data: myJsonString,
type:'post',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function () {
alert('send is okay')
}
});
}
如果你使用的是.net core 3.0,你还需要通过安装Microsoft.AspNetCore.Mvc.NewtonsoftJson
来配置json序列化器,并像
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddNewtonsoftJson();
}
public class Hazine:TableBase
{
[Key]
public string UniqueId { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int HazineId { get; set; }
public int HazineType1 { get; set; } // check paid , check
public int ProjectId { get; set; }
public int Mablagh { get; set; }
public int MablaghPaid { get; set; }
[StringLength(150)]
public string HazineDate { get; set; }
public long HazineDateLong { get; set; }
[StringLength(150)]
public string HazineTitle { get; set; }
[StringLength(350)]
public string HazineComment { get; set; }
[StringLength(150)]
public string ForoshgahName { get; set; }
[StringLength(150)]
public string PayLastDate { get; set; }
[StringLength(150)]
public long PayDateLong { get; set; }
}
public class TableBase
{
[NotMapped]
public bool isModified { get; set; }
[StringLength(150)]
public string SaveDate { get; set; }
public long SaveDateLong { get; set; }
[StringLength(150)]
public string SendDate { get; set; }
public long SendDateLong { get; set; }
}
控制台日志:
{"HazineId":"4","UniqueId":"1111","HazineType1":"1","HazineType2":"1","SendDate":"5","ProjectId":"1","Mablagh":"1","MablaghPaid":"1","HazineDate":"1","HazineDateLong":"1","HazineTitle":"11111","HazineComment":"1","ForoshgahName":"1","PayLastDate":"1","PayDateLong":"111111111","SaveDate":"8888","SaveDateLong":"888","SendDateLong":"5"}
有效:
[HttpPost]
public IActionResult Edit([FromBody]Object data)
{
Hazine hazineJson =JsonConvert.DeserializeObject<Hazine>(data.ToString());
hazine.Update(hazineJson);
return View();
}
无效:
[HttpPost]
public IActionResult Edit([FromBody]Hazine data)
{
hazine.Update(data);
return View();
}
在第二个函数中无法调用并发生错误 500