Json MVC中的AJAX POST数据行始终为空

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

有人能帮我做以下事情吗。我试图将JSON数据发布到控制器,但控制器从未用数据填充变量

这是控制器,始终显示null

这是控制器

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)