Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典绑定MVC_C#_Asp.net Mvc - Fatal编程技术网

C# 字典绑定MVC

C# 字典绑定MVC,c#,asp.net-mvc,C#,Asp.net Mvc,我认为守则如下: @model Dictionary<Project, List<ProjectActualCapacity>> var model2 = Model.ToList(); @for (int i=0;i<Model.Count();i++) { <tr> <td> @Html.DisplayFor(r => model2[i].Key.N

我认为守则如下:

@model Dictionary<Project, List<ProjectActualCapacity>>

var model2 = Model.ToList();

@for (int i=0;i<Model.Count();i++)
    {
        <tr>
            <td>
                @Html.DisplayFor(r => model2[i].Key.Name)
            </td>
            @for (int j = 0; j < model2[i].Value.Count(); j++)
            {
                <td>
                    @Html.TextBoxFor(r => model2[i].Value[j].Hours, new { @class = "form-control input-sm" })
                    @Html.HiddenFor(r => model2[i].Value[j].ID)
                </td>
            }

            @Html.HiddenFor(r => model2[i].Key.ID)
        </tr>
    }
@model字典
var model2=Model.ToList();
@对于(int i=0;i model2[i].Key.Name)
@对于(int j=0;jmodel2[i].Value[j].Hours,新的{@class=“表单控制输入sm”})
@Html.HiddenFor(r=>model2[i].Value[j].ID)
}
@Html.HiddenFor(r=>model2[i].Key.ID)
}
为什么控制器不在POST请求时绑定模型

public ActionResult ProjectActualCapacityIndex(IDictionary<Project, List<ProjectActualCapacity>> model2)
公共行动结果项目实际能力指数(IDictionary model2)

提前感谢

这可能是因为您没有为Model Binder提供足够的信息来完成它的工作

您应该做的是为每个类型创建适当的显示模板和编辑器模板,然后相对地使用
@Html.DisplayFor(…)
@Html.EditorFor(…)

您发布的视图将变成:

@model Dictionary<Project, List<ProjectActualCapacity>>

@for (int i=0;i<Model.Count();i++)
{
    <tr>
        <td>
            @Html.DisplayFor(r => Model[i].Key)
        </td>
        @for (int j = 0; j < Model[i].Value.Count(); j++)
        {
            <td>
                @Html.EditorFor(x => Model[i].Value[j])
            </td>
        }
    </tr>
}
@model字典
@对于(int i=0;i模型[i].Key)
@对于(int j=0;jModel[i].Value[j])
}
}

模型绑定有点让人头疼。基本上,类型的每个元素都必须在主体中,并以特定的方式命名,这样框架才能“啊哈,你是说这个类型”并正确填充它。使用Display和EditorTemplates可以更轻松地正确命名元素。现在看看视图生成的HTML中的名称,希望它能更清楚地说明它的作用。这很奇怪,因为唯一的区别是输入元素的类。编辑器使用class=“text box single line”创建输入