发布时的 Javascript 数组(AJAX)作为单个字符串接收

标签 javascript c# jquery asp.net ajax

我正在尝试将包含 javascript 字符串数组的对象发布到 API c# asp.net,但 API 出于某种原因将该数组作为单个字符串接收,而不是作为字符串数组接收。 请注意,出现问题的唯一部分是电子邮件属性 Javascript 代码:

  vm =
    {
        title: $("#formTitle").val(),
        email: function () {
            var arr = [];
            document.getElementById("issueUserList").childNodes.forEach(function(child) {
                arr.push(child.innerText);
            });
            return arr;
        },
        urgencyFlag: parseInt($("#formUrgencyFlag").val()),
        completionFlag: parseInt($("#formCompletionFlag").val()),
        category: {
            id: $("#category").val(),
            description: $("#category :selected").attr("name")
        },
        issueTagsId: $("#tags").val().map(Number),
        description: $("#formDescription").val(),
        solution: $("#formSolution").val(),
        note: $("#formNote").val()
    }
    $.ajax({
            url: "/api/issues",
            method: "POST",
            data: vm
        })
        .done(function() {
            clearIssueForm();
            toastr.success("Issue recorded successfully");
        })
        .fail(function(xhr) {
            if (xhr.status === 404) {
                toastr.error(xhr.responseText
                    .replace("message", "User")
                    .replace("{", "")
                    .replace("}", ""));
            } else {
                console.log(xhr.responseText);
                toastr.error("something unexpected has occured. Please try again");
            }
        });
    }
});

现在,当我调试这个时,它会正确构建一个字符串数组。

应接收此代码的 Api c#

[HttpPost]
public IHttpActionResult CreateIssue(IssueDto dto)
{




    var users = _context.Persons.Where(p => dto.Email.Contains(p.Email)).ToList();
    var issueTags = _context.IssueTagses.Where(
        t => dto.IssueTagsId.Contains(t.Id)).ToList();
    var issue = new Issue
    {
        Title = dto.Title,
        Description = dto.Description,
        Solution = dto.Solution,
        Note = dto.Note,
        UrgencyFlag = dto.UrgencyFlag,
        CompletionFlag = dto.CompletionFlag,
        DateIssueRegistered = DateTime.Now,
        LastUpdate = null,
        CategorieId = dto.Category.Id,
        Persons = users,
        IssueTagses = issueTags
    };
    _context.Issues.Add(issue);
    _context.SaveChanges();

    dto.Id = issue.Id;

    return Created(new Uri(Request.RequestUri +"/" + dto.Id), dto );
}

IssueDto 的结构

 public class IssueDto
{
   public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Solution { get; set; }
    public string Note { get; set; }
    public List<string> Email { get; set; } //Extra 


    public UrgencyFlag UrgencyFlag { get; set; }
    public CompletionFlag CompletionFlag { get; set; }

    public DateTime DateIssueRegistered { get; set; }
    public DateTime? LastUpdate { get; set; }

    public IssueCategorieDto Category { get; set; }
    public List<PersonDto> PersonDtos { get; set; }
    public List<IssueTagsDto> IssueTags { get; set; }
    public List<int> IssueTagsId { get; set; } // Extra info
    public int CategorieId { get; set; }

然后当使用 jquery $.ajax 发布到 api 时,api 将此数组转换为单个字符串,例如“name1,name2”而不是 [name1],[name2] 因此我的 _context.Persons.Where 代码无法由于用户不存在,因此在数据库中查找与该匹配的任何内容。 知道为什么会发生这种情况,或者您需要任何其他信息来理解该问题吗?

最佳答案

你需要调用函数:-

vm = {
  title: $("#formTitle").val(),
  email: function() {
    var arr = [];
    document.getElementById("issueUserList").childNodes.forEach(function(child) {
      arr.push(child.innerText);
    });
    return arr;
  }(), // <--- HERE
  urgencyFlag: parseInt($("#formUrgencyFlag").val()),
  completionFlag: parseInt($("#formCompletionFlag").val()),
  category: {
    id: $("#category").val(),
    description: $("#category :selected").attr("name")
  },
  issueTagsId: $("#tags").val().map(Number),
  description: $("#formDescription").val(),
  solution: $("#formSolution").val(),
  note: $("#formNote").val()
}

这将在创建对象后立即调用该函数,将属性设置为数组。

关于发布时的 Javascript 数组(AJAX)作为单个字符串接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41570890/

相关文章:

javascript - 排序选择选项元素

javascript - 在javascript中复制对象数组

c# - 非线性系统 - 如何跟踪委托(delegate)的未知数?

c# - 使用正则表达式分割名称

javascript - 如何在网页上显示 moment.js 时间?

javascript - 是否有可能得到一个 :hover color via javascript without hovering on the element?

javascript - 如何在非事件选项卡中获取元素的位置

javascript - 显示编码表情符号到 html 的百分比

javascript - 如何查看我的机器人当前所在(已加入)的语音 channel 的大小?

c# - 找不到类型或命名空间 IJSObjectReference