2017-08-16 150 views
0

您好我有一个视图,我在其中编写了一个jQuery脚本来将html表值传递给JSON对象,如下所示;如何将jQuery数组对象传递给控制器​​方法

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

虽然我离开了上述代码的一部分,但我确认contactData对象具有所需要的数据。所以我在那里没有问题。

我的挑战:现在我需要如下图所示传入我的控制器方法来获取值到数据库中的对象contactData;

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

我已搜索,但仍未找到与我的要求类似的东西。我希望在这里得到快速的帮助。谢谢。

+0

数据我猜你正在使用的形式将数据提交到控制器。 如果是这样,您可以将数据添加到隐藏的输入类型。 – mausinc

+0

您是否尝试过使用JQuery AJAX库?或者如果你不能使用JQuery,那么Javascript有一个内置的XMLHttpRequest类。 –

+0

@mausinc是的。我转换为json对象的html表格在一个表单标签内。问题是我如何将对象传递给隐藏的输入类型?请原谅我,如果这是一个简单的任务。我只是不知道该怎么做。 –

回答

1

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

请与您的Chrome检查隐藏字段的ID,并添加这样

$('#hiddenFieldId').val(contactData); 
基于您的代码
+0

我使用Newtonsoft的Json将字符串反序列化为json对象,并以我想要的方式使用它。非常感谢你的领导。 –

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对象。

*新的编辑*

我看到你的表已输入字段。 你只需要做两件事情提交联系人数据

  1. 确保您的表为“ContactPersons [0] .firstName” withing形式的表
  2. 名称的所有输入字段和“ContactPersons [ 0] .lastName“ 零将随表格中的每一行递增。即第一行为0,第二行为1,依此类推。 这会将对象作为ContactPersons数组与主对象一起发布。

只要确保您使用字段的名称和他们的情况。

+0

这与View Model中的ContactPersons属性相似。我已经有了。但是,我如何通过主对象将json ContactData传递给属性? –

+0

好的,我可以帮你。你能告诉我你当前的主要对象是如何传递的吗? – Shahbaz

+0

谢谢Shabhbaz。请看看我拥有我的控制器的问题。主要对象是正在创建的“BusinessPartner”。并且参数是ViewModel'CreateBusinessPartnerVM'。或者你想看看ViewModel本身? –

相关问题