List属性不在控制器中的post上绑定

时间:2012-08-30 05:53:27

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

我知道这个问题已被问了很多时间,但原谅我,因为我现在已经浪费了很多时间,因此最终发布了它。 总而言之,我有一个视图模型具有一些复杂类型的属性和复杂的类型列表属性。

public class ViewModel
{
    public ViewModel()
    {
        Gains = new List<Gain>();

    }
    [UIHint("Common")]
    public AllRegRecordsLog commonRegisterFields { get; set; }
    public Potential Potential { get; set; }
    [UIHint("Gains")]
    public List<Gain> Gains { get; set; }

    public void CreateGains(int count = 1)
    {

        for (int i = 0; i < count; i++)
        {

            Gains.Add(new Gain());

        }


    }

}

现在我的视图createOrEdit我将此属性称为

@Html.EditorFor(model => model.Gains)

我在我的特定视图文件夹中放置了一个编辑器模板

@model Gains
    table id="gainsTable" class="content-tables"style="width:98%">
    <tr id="defaultGainsRow">
            <td class="editor-label">
                @Html.LabelFor(model => model.VolumeGainLow)
            </td>
            <td class="editor-field">
                @Html.TextBoxFor(model => model.VolumeGainLow)
                @Html.ValidationMessageFor(model => model.VolumeGainLow)
            </td>

            </tr>

     <tr>
    <td colspan="4">
      <input id="addGainsButton"type="button" class="t-button" Value="Add Potential Gains"/>
    </td>
    </tr>
    </table>

但不知怎的,我得到错误“传入字典的模型项是'System.Collections.Generic.List类型但是期望收益”

我正在使用asp.Net MVC 4

请指出我正确的方向。

谢谢

比拉尔

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

修改editortemplate以获取List并在

中执行循环逻辑
@model List<Gain>
@foreach(var gain in Model)
{
    table id="gainsTable" class="content-tables"style="width:98%">
    <tr id="defaultGainsRow">
            <td class="editor-label">
                @Html.LabelFor(gain=> gain.VolumeGainLow)
            </td>
            <td class="editor-field">
                @Html.TextBoxFor(gain=> gain.VolumeGainLow)
                @Html.ValidationMessageFor(gain=> gain.VolumeGainLow)
            </td>

            </tr>

     <tr>
    <td colspan="4">
      <input id="addGainsButton"type="button" class="t-button" Value="Add Potential Gains"/>
    </td>
    </tr>
    </table> 
}
编辑:我的剃刀可能不是100%,但你明白了

答案 2 :(得分:0)

看起来您正在尝试将视图声明为绑定到属性而不是类型。这是不可能的。您必须将模型声明为Web项目引用的有效类型,以便模板化。

Gains属性的类型为List<Gain&gt; . Since your收益view has a收益type declared, your UIHintAttribute`无效。