动态模型绑定部分视图到模型MVC?

时间:2014-10-25 20:28:39

标签: asp.net-mvc model-binding

我正在尝试将模型从局部视图绑定到我的主窗体。我的模型workoutPlan仅存储WorkoutSets列表

public List<WorkoutSet> WorkoutSet;

在我的主页面中。我的表格看起来像这样:

@model WorkoutPlanObjects.WorkoutPlan
@using (Html.BeginForm("AddNewPlan", "Workout", FormMethod.Post))
{

if (Model != null)
{
    <table id="workoutTable">
        <tr>
            <td>
                @{Html.RenderPartial("~/Views/Partial/_AddNewPlan.cshtml", Model);}
            </td>
        </tr>
    </table>
}
<input type="submit" id="submit" value="submit" />

}

这是我的部分视图_AddNewPlan

@model WorkoutPlanObjects.WorkoutPlan

@if(Model!=null)
{ 
       foreach (var item in Model.WorkoutSet)
       {
            @Html.TextBoxFor(a => item.Repeats)
       }            
}

我能够使用ajax调用更新我的局部视图,但是当我尝试提交表单时,没有值传递。这是chrome中代码的片段,显示了渲染的局部视图(原因是格式化)。对此有何解决方案?

我可以看到渲染视图的名称都是相同的item.Repeats。我应该如何更改此部分视图名称以与主页模型绑定?

<form action="/Workout/AddNewPlan" method="post">    

    <table id="workoutTable">
        <tbody><tr>
            <td>
              <input id="item_Repeats" name="item.Repeats" type="text" value="1">
              <input id="item_Repeats" name="item.Repeats" type="text" value="2">
              <input id="item_Repeats" name="item.Repeats" type="text" value="3">
              <input id="item_Repeats" name="item.Repeats" type="text" value="4">
            </td>
        </tr>
       </tbody>
    </table>
   <input type="submit" id="submit" value="submit">
</form>

1 个答案:

答案 0 :(得分:1)

foreach循环更改为for循环,以便正确命名输入

foreach (iny i = 0; i < Model.WorkoutSet.Count; i++)
{
  @Html.TextBoxFor(a => a.WorkoutSet[i].Repeats)
}

将呈现

<input .... name="WorkoutSet[0].Repeats" type="text" value="1">
<input .... name="WorkoutSet[1].Repeats" type="text" value="2">

并允许DefaultModelBinder绑定集合。

注意属性WorkoutSet必须为IList。或者,您可以为EditorTemplate创建自定义WorkoutSet并使用@Html.EditorFor(m => m.WorkoutSet)