如何将数据列表从View传递到Controller

时间:2014-03-14 05:59:37

标签: asp.net-mvc-3 asp.net-mvc-4

我在.cshtml中有如下所示的列表

@using (Html.BeginForm("About","Home")) 
{ 
<div id="Test">
<table id="DeptIds">
@for (int i = 0; i <= @Model.Count()-1;i++ )
{
<tr>
    <td>
        @Html.TextBoxFor(x => x[i].DeptId)
    </td>
    <td>
        @Html.TextBoxFor(x => x[i].DeptName)

    </td>
</tr>
 }


</table>

<input type="button" value="HitMe" onclick="Save()" />
</div>
}
<script>
function Save()
 {

 $.ajax({
        type: 'POST',
        url: '@Url.Action("About")',           
        data: $("#Test").serialize(),  
        success: function (data) {
            alert(data);
            $('.tampil_vr').text(data);
        }
    });
}
</script>

Save函数将执行ajax方法并序列化所有数据并传递给控制器​​。

控制器代码:

    [HttpPost]
    public ActionResult About(List<Dept> obj)
    {
        ViewBag.Message = "Your app description page.";

        return View();
    }

当我执行obj为null但如果我在obj中更改type =“Submit”,我将获得List数据。那么如何在ajax调用中填充obj。

1 个答案:

答案 0 :(得分:3)

您需要序列化表单而不是div

@using (Html.BeginForm("About","Home",FormMethod.Post,new {id="frm_Test"})) 
{ 
.....

...

}

在脚本中提供要序列化的表单的ID

<script>
function Save()
 {

 $.ajax({
        type: 'POST',
        url: '@Url.Action("About")',           
        data: $("#frm_Test").serialize(),  
        success: function (data) {
            alert(data);
            $('.tampil_vr').text(data);
        }
    });
}
</script>