迭代似乎被忽略了?

时间:2013-12-20 17:04:41

标签: 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")
    }
}

Property EditorTemplate

@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 />

问题:

除控件中的值外,输出符合预期。它们是来自m.Properties [0]的所有值,当我逐步执行for循环时,我检查I的值并且它正在增加。 m.Properties [0]和m.Properties [1]不同(在调试时验证)。

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

问题:任何想法为什么即使正确迭代它也会输出错误的值?

修改 经过进一步检查后,我注意到它正在尝试将正确的值放在TextBoxFor Value.Value中,但LabelFor Name不正确并始终显示“Name”。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是LabelFor没有写出属性的值,它会写出与之关联的标签。默认情况下,这只是属性名称,但可以使用模型属性上的DisplayAttributeDisplayNameAttribute覆盖。

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

如果您想写出属性的,请使用DisplayFor

@Html.DisplayFor(p => p.Name)

或者,简单地说:

@Model.Name