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个要迭代的项目,但它没有拾取这些项目的属性。指导?
更新
因此,所有我落得这样做交换我LabelFor
到TextBoxFor
和我的价值观出现了......他们当然会。 (累,漫长的一天) - @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>
我没有用'@m任何运气。名称“,但是你写的东西用@TextBoxFor'慢跑了我的大脑 - 谢谢! – itsmatt
@itsmatt:没问题。有趣的是:我实际上首先想到了这一点,并以这种方式回应,但是当我再次阅读这个问题时,我以为你真的想要标签而不是文本框,所以我改变了我的答案。 – StriplingWarrior