2013-12-20 169 views
0

信息:迭代似乎被忽略?

我有「屬性」列表來遍歷,它似乎忽略迭代(儘管迭代作品)。老實說,我不知道發生了什麼。我一步步走過調試器,它只是神祕地不起作用。

我的Razor視圖:

@using (Html.BeginForm()) 
{ 
    for (Int32 I = 0; I < this.ViewData.Model.Properties.Count; ++I) 
    { 
     @Html.EditorFor(m => m.Properties._Properties[I], "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名稱不正確,總是顯示「姓名」。

+0

*但是LabelFor名稱是不正確的,總是顯示「名稱「*你期待它展示什麼? –

+0

該物業的名稱。 m.Properties [0]的名字是「Name」,但m.Proeprties [1]的名字是「Description」。對不起。 – Shelby115

+1

'LabelFor'寫出屬性的名稱,而不是它的值。在所有情況下,屬性名稱都是'Name',因爲...該屬性被稱爲'Name'。除非「屬性」是模型元數據中指定的具有不同顯示名稱的不同類的列表,在這種情況下,您需要將此代碼添加到您的問題中。如果你想要屬性的值而不是名稱,也許你想使用'DisplayFor'而不是'LabelFor'。 –

回答

1

您遇到的問題是LabelFor未寫出該屬性的值,它會寫出與其關聯的標籤。默認情況下,這只是屬性名稱,但可以在模型屬性上使用DisplayAttributeDisplayNameAttribute覆蓋。

在上例中,這將始終導致寫出相同的值,因爲它在每次迭代中都是相同的模型屬性。

如果你想寫出屬性的,使用DisplayFor

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

或者,乾脆:

@Model.Name