2011-08-22 92 views
1

我正在處理我的第一個ASP.NET MVC 3應用程序,並試圖在創建頁面上顯示特定冰淇淋的成分。Html.EditorFor顯示正確的項目數量,但不顯示數據

我已經有了一個具有結構像這樣的頁面視圖模型:

public class IceCreamViewModel 
{ 
    ... 
    public IEnumerable<IngredientViewModel> Ingredients { get; set; } 
} 

(還有其他的屬性,但它們不是密切相關的討論)

Ingredients被控制器上的Create動作填充,我已驗證它包含我想要的數據。

IngredientViewModel具有以下結構:

public class IngredientViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool IsChecked { get; set; } 
} 

在創建視圖我試圖顯示成分的集合,以允許用戶檢查其是在配方(例如,花生,雞蛋等)和我做這樣的事情:

@Html.EditorFor(m => m.Ingredients) 

我寫和編輯模板,這看起來像這樣:

@model IceCream.ViewModels.Ingredients.IngredientViewModel 
<div> 
    @Html.HiddenFor(m => m.Id) 
    @Html.LabelFor(m => m.Name) 
    @Html.CheckBoxFor(m => m.IsChecked) 
</div> 

我期望顯示的是每種成分的一大堆標籤和複選框,但顯示的是正確數量的標籤/複選框條目,但它們都會說「名稱」而不是成分名稱在IngredientViewModel中。所以我肯定在這裏做錯了事。它顯然知道它有N個要迭代的項目,但它沒有拾取這些項目的屬性。指導?


更新

因此,所有我落得這樣做交換我LabelForTextBoxFor和我的價值觀出現了......他們當然會。 (累,漫長的一天) - @LabelFor使用財產的名稱,或註釋DisplayName爲財產。事情現在正常工作...沿着,沒有看到這裏...

回答

1

您正在嘗試創建Name屬性的標籤(如果你想讓用戶編輯成分名稱),而不是實際顯示該名稱作爲複選框的標籤。

如何改變:

@Html.LabelFor(m => m.Name) 

...到:

@m.Name 

或者,更好:

@model IceCream.ViewModels.Ingredients.IngredientViewModel 
<div> 
    @Html.HiddenFor(m => m.Id) 
    <label for="@m.Id">@m.Name</label> 
    @Html.CheckBoxFor(m => m.IsChecked) 
</div> 
+0

我沒有用'@m任何運氣。名稱「,但是你寫的東西用@TextBoxFor'慢跑了我的大腦 - 謝謝! – itsmatt

+0

@itsmatt:沒問題。有趣的是:我實際上首先想到了這一點,並以這種方式迴應,但是當我再次閱讀這個問題時,我以爲你真的想要標籤而不是文本框,所以我改變了我的答案。 – StriplingWarrior