以下是部分内容:
@model IEnumerable<BLL.DomainModel.Jerk>
@foreach (var jerk in Model)
{
using (Html.BeginForm("AddJerk", "Jerk", FormMethod.Post, new { @class = "jerkListForm" }))
{
@Html.HiddenFor(jerk => )
@jerk.Name
...
}
}
HiddenFor
lambda正在寻找的类型与@model
(IEnumerable)相同,而我正在寻找IEnumerable中的单个对象。
我错过了什么?为什么它仍在寻找foreach循环中的集合?
答案 0 :(得分:12)
@model IEnumerable<Type>
@foreach(var item in Model)
{
@Html.HiddenFor(model => item)
}
不要忘记Type必须是de / serializable才能使其正常工作。
答案 1 :(得分:6)
Asp.Net MVC提供的所有Html For Helpers使用页面定义模型的模型。你可以做的是创建一个EditorTemplate
。在名为EditorTemplates
的View文件夹中创建一个子目录,例如在\Home\EditorTemplates\
中,并添加一个名为Jerk.cshtml
的新视图,并以此方式分配您的模型。
然后您可以为每个属性使用Html.HiddenFor(f => f.Name)
等等。这将为您提供您期望的键入访问权限。
在主视图中,您将执行以下操作:
@foreach(var jerk in Model) {
@Html.EditorFor(m => jerk)
}
或者您可以调用EditorForModel
,它会自动循环并查找EditorTemplate。
@Html.EditorForModel()
EditorFor
将查找您首先创建的EditorTemplate,然后它将从那里开始,直到它找到覆盖或输出一个MVC认为您可能需要。
答案 2 :(得分:4)
我会使用for循环代替。这样你的隐藏字段将具有正确的名称。如果您使用示例中的帮助程序,则所有隐藏字段的名称都为jerk,不会正确回发。
@foreach (var i = 0; i < Model.Count; i++)
{
var jerk = Model[i];
using (Html.BeginForm("AddJerk", "Jerk", FormMethod.Post, new { @class = "jerkListForm" }))
{
@Html.HiddenFor(model => model[i])
@jerk.Name
...
}
}
如果在回发中绑定对您无关紧要,您只需执行
即可@ Html.HiddenFor(jerk =&gt; jerk)