如何在提交表单发布方法之前将复杂数据类型附加到查看模型

时间:2016-10-04 11:18:04

标签: javascript c# asp.net-mvc forms

我正在使用Form Post方法将数据提交到我的MVC应用程序中的控制器。 我的MVC应用程序控制器方法接受ViewModel。 我添加了其他viewModel的新列表,我想将数据传递给新添加的viewmodel。

示例代码(未完全执行)

控制器现有代码

public ActionResult AddProduct(ProductViewModel productViewModel)
{
    //some operation
} 

public class ProductViewModel
{
    Branch_Product_Taxes = new List<Branch_Product_TaxesViewModel>();
} 

 //viewmodel 

$('#ProductForm').submit(); //javascript form submit method

var ObjectList = new Array()

现在我添加了对象列表中的对象列表 我想通过这个列表控制器

2 个答案:

答案 0 :(得分:1)

您需要根据复杂数据类型创建隐藏元素 考虑以下问题 如果您需要发布包含姓名等属性的员工列表,请查看以下代码。

您的观点模仿类似

 public class ProductViewModel
{
     public IList<Employees> = new List<Employees>();
} 

Javascript代码

    var  html = '<input type="hidden" name="Employees[0].Name" value="Employee1"/>';
    html+='<input type="hidden" name="Employees[0].Designation" value="Des1"/>';
    html+='<input type="hidden" name="Employees[1].Name" value="Employee2"/>';
    html+='<input type="hidden" name="Employees[1].Designation" value="Des2"/>';
    $('#ProductForm').append(html);
    $('#ProductForm').submit();

您将获得两个记录的列表作为(0和1)索引。

您可以使用for循环并动态生成隐藏的html,并在表单提交之前附加它。

答案 1 :(得分:0)

你需要在你传递的ViewModel中将列表定义为属性,默认情况下,modelbinder不会考虑像

这样的字段
Branch_Product_Taxes = new List<Branch_Product_TaxesViewModel>();

你需要定义属性Like

 public IList<Branch_Product_TaxesViewModel> Branch_Product_Taxes  { get; set; }