Asp.net mvc 4 迭代似乎已被忽略?

Asp.net mvc 4 迭代似乎已被忽略?,asp.net-mvc-4,html-helper,Asp.net Mvc 4,Html Helper,信息: @using (Html.BeginForm()) { for (Int32 I = 0; I < this.ViewData.Model.Properties.Count; ++I) { @Html.EditorFor(m => m.Properties._Properties[I], "Property") } } 我有一个要迭代的“属性”列表,它似乎忽略了迭代(尽管迭代是有效的)。老实说,我不知道发生了什么。我已经一步一步地通

信息:

@using (Html.BeginForm()) 
{
    for (Int32 I = 0; I < this.ViewData.Model.Properties.Count; ++I)
    {
        @Html.EditorFor(m => m.Properties._Properties[I], "Property")
    }
}
我有一个要迭代的“属性”列表,它似乎忽略了迭代(尽管迭代是有效的)。老实说,我不知道发生了什么。我已经一步一步地通过了调试器,但它却神秘地不起作用

我的剃须刀视图:

@using (Html.BeginForm()) 
{
    for (Int32 I = 0; I < this.ViewData.Model.Properties.Count; ++I)
    {
        @Html.EditorFor(m => m.Properties._Properties[I], "Property")
    }
}
@使用(Html.BeginForm())
{
对于(Int32 I=0;Im.Properties.\u Properties[I],“Property”)
}
}
属性编辑器模板

@model NMBS.EntityModels.Property

@Html.HiddenFor(p => p.ID)
@Html.LabelFor(p => p.Name)
@Html.HiddenFor(p => p.DataType)
@Html.HiddenFor(p => p.ValueFormat)
@Html.TextBoxFor(p => p.Value.Value)
@Html.HiddenFor(p => p.Value.DataType)
@Html.HiddenFor(p => p.Value.ValueFormat)
<br />
@model NMBS.EntityModels.Property
@Html.HiddenFor(p=>p.ID)
@LabelFor(p=>p.Name)
@Html.HiddenFor(p=>p.DataType)
@Html.HiddenFor(p=>p.ValueFormat)
@Html.TextBoxFor(p=>p.Value.Value)
@Html.HiddenFor(p=>p.Value.DataType)
@Html.HiddenFor(p=>p.Value.ValueFormat)

问题:

@using (Html.BeginForm()) 
{
    for (Int32 I = 0; I < this.ViewData.Model.Properties.Count; ++I)
    {
        @Html.EditorFor(m => m.Properties._Properties[I], "Property")
    }
}
除控件中的值外,输出与预期一致。它们都是m.Properties[0]中的值,当我逐步通过for循环时,我检查I的值,它正在增加。m、 属性[0]和m.Properties[1]不同(在调试时验证)

只是澄清一下:EditorFor创建了正确的控件,但是值都来自m.Properties[0],而不是m.Properties[I]。不过,我确实会随着循环的每次迭代而增加。如果我用
@Html.EditorFor(e=>e.Properties.\u Properties)
替换for循环,它也会做同样的事情

问题:你知道为什么它在正确迭代的情况下仍输出不正确的值吗

编辑:
进一步检查后,我注意到它试图在文本框中为Value.Value输入正确的值,但是LabelFor名称不正确,并且总是显示“Name”。

您遇到的问题是,
LabelFor
没有写出属性的值,而是写出了一个与其相关联的标签。默认情况下,这只是特性名称,但可以使用模型特性上的
DisplayAttribute
DisplayNameAttribute
覆盖

在上面的示例中,这将始终导致写出相同的值,因为它在每个迭代中都是相同的模型属性

如果要写出属性值,请使用
DisplayFor

@Html.DisplayFor(p => p.Name)
或者,简单地说:

@Model.Name

但是,LabelFor名称不正确,并且始终显示“名称”。你希望它显示什么?房产的名称。m、 属性[0]的名称为“Name”,而m.proeprities[1]的名称为“Description”。很抱歉。
LabelFor
写出属性的名称,而不是属性的值。属性名称在所有实例中都是
name
,因为。。。该属性称为
Name
。除非
Properties
是模型元数据中指定的具有不同显示名称的不同类的列表,在这种情况下,您需要将此代码添加到问题中。如果您想要属性的值而不是名称,那么您可能想要使用
DisplayFor
而不是
LabelFor
。嗯,我觉得有点迟钝。好的,把它写下来作为一个答案,这样我就可以标记它了,我确信这就是问题所在(肯定是问题所在)。