如何将javascript数组放入MVC Model View数组?

时间:2015-04-10 13:35:26

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

在一个视图中,我在javascript中创建一个包含元素ID的数组,现在我想将它们传递到我的MVC模型中的模型字段中是否有人已经遇到过这种问题这是我的模型:

public class AppointmentModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public int[] PersonsIds { get; set; }
    public int[] CompaniesIds { get; set; }
}

并且在视图中我将两个数组保持为隐藏字段

@html.hiddenfor(model => model.PersonsIds)
@html.hiddenfor(model => model.CompaniesIds)

所以架构如下所示:

javascript->model->submit model->controller

请提供任何帮助

2 个答案:

答案 0 :(得分:2)

假设您需要弄清楚如何启用模型回发,我就是这样做的。

当您在集合中绑定原始类型时,您只需添加与集合同名的输入,模型绑定器就会选择它们。

举个简单的例子,如果您的视图呈现以下内容:

<input type="hidden" name="PersonsIds" value="1" />
<input type="hidden" name="PersonsIds" value="4" />

这将以这样的方式发回:

PersonsIds=1&PersonsIds=4

模型绑定器将拾取它们并将它们转换为整数集合。

这是一个简单的例子,可以看到模拟绑定在虚拟数据中的操作,你只需要在回发之前用javascript渲染隐藏的值。

查看

@using (Html.BeginForm())
{
    foreach(var personId in Model.PersonsIds)
    {
        @Html.Hidden("PersonsIds", personId)
    }

    <input type="submit" value="submit" >
}

<强>控制器

public ActionResult Index()
{
      return View(new AppointmentModel { PersonsIds = new int[] { 1, 4 } });
}

[HttpPost]
public ActionResult Index(AppointmentModel model)
{
     return View(model);
}

已填充的已发布数据 enter image description here

更新隐藏值的Javascript

<input type="text" id="IdToAdd" />
<button >Add</button>
<input type="hidden" name="PersonsIds" value="1" />
<input type="hidden" name="PersonsIds" value="4" />
<script>
$(function() {
   $('button').click(function() {
           $(this).after('<input type="hidden" name="PersonIds" value="' + $('#IdToAdd').val()  + '" />');
  });

});
</script>

<强> jsFiddle

答案 1 :(得分:0)

@model AppointmentModel

@for(var i = 10; i < model.PersonsIds.Length; i++)
{<p>Line 
    @html.hiddenfor(model => model.PersonsIds[i])
</p>}

或者例如

@for (int i = 0; i < Model.Count; i++)
{
    @Html.HiddenFor(x=>Model[i].Id) @Model[i].Name  
    @Html.TextBoxFor(x => Model[i].Quantity) <br/>
}