Json MVC中的AJAX POST数据行始终为空
有人能帮我做以下事情吗。我试图将JSON数据发布到控制器,但控制器从未用数据填充变量 这是控制器,始终显示null 这是控制器Json MVC中的AJAX POST数据行始终为空,json,ajax,asp.net-mvc,null,Json,Ajax,Asp.net Mvc,Null,有人能帮我做以下事情吗。我试图将JSON数据发布到控制器,但控制器从未用数据填充变量 这是控制器,始终显示null 这是控制器 public ActionResult SyncMail(List<MailSyncDTO> emailLst) { return null; } 这是引用的DTO public class MailSyncDTO { public string ID { get; set; } public string emailSource
public ActionResult SyncMail(List<MailSyncDTO> emailLst)
{
return null;
}
这是引用的DTO
public class MailSyncDTO
{
public string ID { get; set; }
public string emailSource { get; set; }
public string emailDestination { get; set; }
public string SyncMail { get; set; }
}
您的控制器希望接收列表,但您没有向他发送列表。按照您制作控制器的方式,您发送的Json应该如下所示: [source@co.uk,source@co.uk,source@co.uk] 您可以在C项目中创建一个完全反映Json并在控制器中自动映射的
public ActionResult SyncMail(List<MailSyncDTO> emailLst)
{
return null;
}
我已经用这个javascript方法对它进行了测试:
function testIt() {
var emailLst = [];
// Replace bellow part with yours
var obj = new Object();
obj.EmailDestination = "dest@co.uk";
obj.Source = "source@Context.uk";
obj.SyncMail = "on";
obj.Id = "1";
emailLst.push(obj);
// Replace above part with yours
// Adding this before sending will make sure that you are not sending any empty objects.
emailLst.forEach(function(item, i) {
if ($.isEmptyObject(item)) {
emailLst.splice(i, 1);
}
});
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '/MailSyncDBs/SyncMail',
data: JSON.stringify(emailLst) // And not JSON.stringify({emailLst : emailLst })
});
}
尝试添加类似以下的类:
public class SyncMailDto
{
public string EmailSource {get; set;}
public string EmailDestination {get; set;}
public string SyncMail {get; set;}
public string Id {get; set;}
}
并将控制器方法的签名更改为:
[HttpPost]
public JsonResult SyncMail(List<SyncMailDto> emailLst){
foreach(var mail in emailLst){
// Do something with your mail
}
return Json("It Works !");
}
以及您的POST方法的签名:
public JsonResult SyncMail(MailListWrapperDto emailLst)
你发送的是一组物品,而不是一组细线汉克斯·安托万,我明天早上再试试。我不熟悉Json和MVC,但我认为Json.stringify是在发送数据之前将数据转换为字符串。这不正确吗?没有那么不正确,但是您要转换的数据是对象列表,而不是字符串列表。确切地说,如果我是正确的,你不需要对json进行字符串化。我仍然无法让它工作。我开始了一个新项目,因为我把另一个项目搞得一团糟。我添加了一个具有字符串属性的DTO。变量仍然为空。我已经用更新的DTO更新了原始问题并删除了图像。@NathanLinus我已经用javascript代码编辑了我的答案,并在Visual Studio 2017中进行了测试,结果正常。真正的问题是你发送JSON的方式。如果它对你有帮助,请考虑把这个标记为答案。
public class MailListWrapperDto{
public List<SyncMailDto> EmailLst {get;set;}
}
public JsonResult SyncMail(MailListWrapperDto emailLst)