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

时间:2011-08-22 21:47:13

标签: asp.net asp.net-mvc-3

我正在开发我的第一个ASP.NET MVC 3应用程序,我正在尝试在创建页面上显示特定冰淇淋的成分。

我有一个页面的viewmodel,其结构类似于:

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个项目要迭代,但它没有获取这些项目的属性。指导?


更新

所以,我最终做的就是将LabelFor切换为TextBoxFor,我的价值出现了......当然,他们会这样做。 (累了,漫长的一天) - @LabelFor使用属性的名称,或使用带注释的DisplayName作为属性。现在事情很好......继续前进,没有什么可看的......

1 个答案:

答案 0 :(得分: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>