Html.EditorFor显示正确的项目数量,但不显示数据

问题描述:

我正在处理我的第一个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为财产。事情现在正常工作...沿着,没有看到这里...

您正在尝试创建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