发布时的Javascript数组(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");
            }
        });
    }
});

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

应接收此代码 c# 的 API

[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 );
}

发行的结构

 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()
}

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

相关内容

最新更新