我正在尝试将模型从局部视图绑定到我的主窗体。我的模型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>
答案 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)