javascript - 无法通过ajax查询获取值

标签 javascript asp.net .net ajax asp.net-core

我使用.net core。有这样的类(class):

public class SentEmailItem
{
    public SentEmailItem()
    {
        Attachments = new List<AttachmentItem>();
    }


    public long PKID { get; set; }
    public string EmailTo { get; set; }
    public string EmailFrom { get; set; }
    public string Cc { get; set; }
    public string Bcc { get; set; }
    public string Body { get; set; }
    public string Subject { get; set; }

    public List<string> EmailToList => EmailTo.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();

    public List<string> CcList => (Cc ?? string.Empty).Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();

    public List<string> BccList => (Bcc ?? string.Empty).Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();

    public List<AttachmentItem> Attachments { get; set; }
}

Controller 中的这个方法:

[HttpPost]
public JsonResult SendEmail(SentEmailItem item)
{
    EmailHelper.SendEmailAsync(item);

    return SuccessJsonResult();
}

但是当通过以下代码从ajax调用此方法时:

    $.ajax({
    type: "POST",
    url: self.sendEmailUrl,
    contentType: "application/json",
    dataType: "json",
    data: JSON.stringify({ item: emaiItem })
}).done(function (json) {
    App.unblockUI();

    if (json.HasErrors) {
        var errorsHtml = $.map(json.Errors, function (x) { return "" + x.ErrorMessage + "<br/>"; }).join("");
        UIToastr.ShowMessage('error', 'Error', errorsHtml);
        return;
    }

    self.sendEmailCompleted(json);
});

我无法在 Controller 方法中获取数据。所有数据都有空值。但是在emaiItem中放置的js值看起来像:

Bcc : "Testmail@mail.com"
Body : "test body"
Cc : "Testmail@mail.com"
EmailFrom : "just3f@mail.com"
EmailTo : "Testmail@mail.com"
Subject : "Test subject"

最佳答案

看起来 emaiItem 已经是这样的对象 -

var emaiItem = {Bcc : "Testmail@mail.com",
Body : "test body",
Cc : "Testmail@mail.com",
EmailFrom : "just3f@mail.com",
EmailTo : "Testmail@mail.com",
Subject : "Test subject"};

如果是这样,它可以只使用JSON.stringify(emaiItem)。否则,您可以对上述 emaiItem 进行硬编码,并查看在服务器端填充的这些值。

$.ajax({
    ...
    data: JSON.stringify(emaiItem)
}).done(function (json) {
    ...
});

解决方案

替换为 JSON.stringify(emaiItem),并使用 [FromBody] 属性强制模型绑定(bind)器绑定(bind)请求正文中的数据。

[HttpPost] 
public JsonResult SendEmail([FromBody]SentEmailItem item) 
{
}

关于javascript - 无法通过ajax查询获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787673/

相关文章:

c# - 自定义授权中的 MVC 4.0 FormsAuthentication 和 AuthorizeAttribute

c# - .NET Remoting 自己切换 channel

.net - 在 wcf 服务调用上设置 CultureInfo?

javascript - 以 JSON 格式创建 res.cookie,并将值作为对象

javascript - 从右到左输入掩码

asp.net - ASP.NET MVC 5 中的 ClaimsIdentity

c# - asp.net Base-64 字符串中的无效字符

.net - VS 2015移动文件后无法运行发布

javascript - 如何要求 javascript 等待外部应用程序执行结束?

javascript - 使用条件语句切换这个innerHTML的正确方法是什么?