【问题标题】:Dynamic Model Binding Partial View to Model MVC?动态模型将部分视图绑定到模型 MVC?
【发布时间】:2014-10-26 06:22:47
【问题描述】:

我正在尝试将模型从局部视图绑定到我的主窗体。我的模型workoutPlan 只存储了一个锻炼组列表

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 中代码的 sn-p,它显示了渲染的部分视图(请原谅格式)。有什么解决办法吗?

我可以看到渲染视图的名称都是相同的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>

【问题讨论】:

    标签: asp.net-mvc model-binding


    【解决方案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。或者,您可以为 WorkoutSet 创建自定义 EditorTemplate 并使用 @Html.EditorFor(m =&gt; m.WorkoutSet)

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多