我正在开发我的第一个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
作为属性。现在事情很好......继续前进,没有什么可看的......
答案 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>