如何将jQuery数组对象传递给控制器方法

如何将jQuery数组对象传递给控制器方法,jquery,asp.net-mvc,Jquery,Asp.net Mvc,您好,我有一个视图,其中我编写了一个jquery脚本,将html表值传递到JSON对象中,如下所示 var contactData = []; $('#tblContacts > tbody > tr').each(function () { contactData.push({ firstName: $(this).find('input.c-firstname'

您好,我有一个视图,其中我编写了一个jquery脚本,将html表值传递到JSON对象中,如下所示

            var contactData = [];
            $('#tblContacts > tbody > tr').each(function () {
                contactData.push({
                    firstName: $(this).find('input.c-firstname').val(),
                    lastname: $(this).find('input.c-lastname').val(),
                    phone: $(this).find('input.c-phone').val(),
                    email: $(this).find('input.c-email').val()
                })
            })
        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Create(CreateBusinessPartnerVM businessPartnerVM)
        {
            if (ModelState.IsValid)
            {
                var businessPartner = new BusinessPartner
                {
                    CardCode = prefixCardCode + businessPartnerVM.CardName.ElementAt(0) + DateTime.Now.ToString(),
                    CardName = businessPartnerVM.CardName,
                    CardType = businessPartnerVM.CardType,
                    Email = businessPartnerVM.Email,
                    Phone = businessPartnerVM.Phone,
                    IsActive = businessPartnerVM.IsActive,
                    ContactPersons = //contactData from the jquery script in the view
                };
            }
        }
虽然我遗漏了上面的部分代码,但我确认
contactData
对象具有所需的数据。所以我没有问题

我的挑战:现在我需要将对象
contactData
传递到我的控制器方法中,以将值输入数据库,如下所示

            var contactData = [];
            $('#tblContacts > tbody > tr').each(function () {
                contactData.push({
                    firstName: $(this).find('input.c-firstname').val(),
                    lastname: $(this).find('input.c-lastname').val(),
                    phone: $(this).find('input.c-phone').val(),
                    email: $(this).find('input.c-email').val()
                })
            })
        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Create(CreateBusinessPartnerVM businessPartnerVM)
        {
            if (ModelState.IsValid)
            {
                var businessPartner = new BusinessPartner
                {
                    CardCode = prefixCardCode + businessPartnerVM.CardName.ElementAt(0) + DateTime.Now.ToString(),
                    CardName = businessPartnerVM.CardName,
                    CardType = businessPartnerVM.CardType,
                    Email = businessPartnerVM.Email,
                    Phone = businessPartnerVM.Phone,
                    IsActive = businessPartnerVM.IsActive,
                    ContactPersons = //contactData from the jquery script in the view
                };
            }
        }

我已经搜索过了,但仍然没有找到与我的要求类似的东西。我希望在这里能得到快速的帮助。谢谢。

您需要编辑您的CreateBusinessPartnerVM模型

添加一个新属性,即ContactData对象的数组。通过这种方式,您可以在同一模型中为业务合作伙伴发布联系人数据,并对其进行进一步处理

有点像这样,

public class CreateBusinessPartnerVM {
    .... other properties...
    public ContactData[] ContactList { get; set; }
}

public class ContactData {
   public string FirstName {get; set;}
   public string LastName {get; set;}
   public string Phone {get; set;}
   public string Email {get; set;}
}
完成后,您可以将js contactData对象沿着正在提交的主对象传递

*新编辑*

我看到您的表已经有了输入字段。 您只需要做两件事来提交联系人数据

  • 确保您的桌子与表格在一起
  • 将表中的所有输入字段命名为“联系人[0].firstName”和“联系人[0].lastName” 表中的每一行都将增加零。i、 e.0表示第一行,1表示第二行,依此类推。 这会将对象发布为与主对象的联系人数组

  • 只需确保正确使用字段名称及其大小写。

    您需要编辑CreateBusinessPartnerVM模型

    添加一个新属性,即ContactData对象的数组。通过这种方式,您可以在同一模型中为业务合作伙伴发布联系人数据,并对其进行进一步处理

    有点像这样,

    public class CreateBusinessPartnerVM {
        .... other properties...
        public ContactData[] ContactList { get; set; }
    }
    
    public class ContactData {
       public string FirstName {get; set;}
       public string LastName {get; set;}
       public string Phone {get; set;}
       public string Email {get; set;}
    }
    
    完成后,您可以将js contactData对象沿着正在提交的主对象传递

    *新编辑*

    我看到您的表已经有了输入字段。 您只需要做两件事来提交联系人数据

  • 确保您的桌子与表格在一起
  • 将表中的所有输入字段命名为“联系人[0].firstName”和“联系人[0].lastName” 表中的每一行都将增加零。i、 e.0表示第一行,1表示第二行,依此类推。 这会将对象发布为与主对象的联系人数组

  • 只需确保正确使用字段名称及其大小写。

    根据您的代码,我猜您正在使用表单向控制器提交数据。 如果是,您可以将数据添加到隐藏的输入类型

    使用chrome检查器检查隐藏字段的id,并添加如下数据

    $('#hiddenFieldId').val(contactData);
    

    根据您的代码,我猜您正在使用表单向控制器提交数据。 如果是,您可以将数据添加到隐藏的输入类型

    使用chrome检查器检查隐藏字段的id,并添加如下数据

    $('#hiddenFieldId').val(contactData);
    


    根据您的代码,我猜您正在使用表单向控制器提交数据。如果是这样,您可以将数据添加到隐藏的输入类型中。您是否尝试过使用JQuery AJAX库?或者如果不能使用JQuery,Javascript有一个内置的XMLHttpRequest类。@mausinc没错。我转换为json对象的html表位于表单标记内。问题是如何将对象传递到隐藏的输入类型中?如果这是一个简单的任务,请原谅我。我只是不知道怎么做。检查这个答案,用你的chrome检查器检查隐藏字段的id,然后添加数据,如$(“#hiddenFieldId').val(contactData);太好了,我用答案更新了你的问题,这样寻找相同答案的人可以更容易地找到答案。根据你的代码,我猜你正在使用表单向你的控制器提交数据。如果是这样,您可以将数据添加到隐藏的输入类型中。您是否尝试过使用JQuery AJAX库?或者如果不能使用JQuery,Javascript有一个内置的XMLHttpRequest类。@mausinc没错。我转换为json对象的html表位于表单标记内。问题是如何将对象传递到隐藏的输入类型中?如果这是一个简单的任务,请原谅我。我只是不知道怎么做。检查这个答案,用你的chrome检查器检查隐藏字段的id,然后添加数据,如$(“#hiddenFieldId').val(contactData);太好了,我用答案更新了你的问题,因此寻找相同答案的人可以更容易地找到答案。这类似于视图模型中的
    ContactPersons
    属性。我已经有这个了。但是我如何通过主对象将json ContactData传递到属性中呢?好的,我可以帮你。你能告诉我你目前的主要目标是如何通过的吗?谢谢沙巴兹。请看我的控制器在哪里的问题。主要对象是正在创建的
    业务伙伴
    。参数是ViewModel
    CreateBusinessPartnerVM
    。或者您想查看ViewModel本身吗?我想查看提交主对象的javascript部分。。在电视上哦,不,我没有。我打算在服务器端完成这一切。这就是控制器的本质。这类似于视图模型中的
    ContactPersons
    属性。我已经有这个了。但是我如何通过主对象将json ContactData传递到属性中呢?好的,我可以帮你。你能告诉我你目前的主要目标是如何通过的吗?谢谢沙巴兹。请看我的控制器在哪里的问题。主要对象是正在创建的
    业务伙伴
    。参数是ViewModel
    CreateBusinessPartnerVM
    。或者您想查看ViewModel本身吗?我想查看提交主对象的javascript部分。。在电视上哦,不,我没有。我打算在服务器端完成这一切。这就是控制器的本质。我使用Newtonsoft的Json将字符串反序列化回Json对象,并按照我想要的方式使用它。非常感谢您的指导。我使用了Newtonsoft的Json来