可以在Razor视图中间接访问模型的属性吗?
所以而不是:
@Html.LabelFor(model => model.ColA)
@Html.LabelFor(model => model.ColB)
@Html.LabelFor(model => model.ColC)
以下是可能的吗?
@foreach (var col in Model.Columns)
{
@Html.LabelFor(model => model[col])
}
我应该确定要使用的模型是EF模型:
public class Record
{
[Key, Display(Name="Column A")]
public string ColA { get; set; }
[Display(Name="Column B")]
public string ColB { get; set; }
[Display(Name="Column C")]
public string ColC { get; set; }
}
public class RecordDbContext : DbContext
{
public DbSet<Record> Records { get; set; }
}
我如何实现'Columns'来显示属性的显示名称?
答案 0 :(得分:0)
如果Model.Columns
是一个几乎可以工作的列表。您需要将其更改为:
@foreach (var col in Model.Columns)
{
@Html.LabelFor(model => col)
}
答案 1 :(得分:0)
似乎您的视图模型不适合您的视图要求(循环显示某些值并显示有关它们的标签)。您可以在视图模型中使用集合而不是属性,因为它允许您循环:
public IEnumerable<SomeModel> Columns { get; set; }
然后在您的视图中,您可以使用显示模板而不是编写循环:
@model MyViewModel
@Html.DisplayFor(x => x.Columns)
然后定义相应的模板,该模板将自动为Columns集合的每个元素(~/Views/Shared/DisplayTemplates/SomeModel.cshtml
)呈现:
@model SomeModel
@Html.LabelFor(x => x.SomeModelProperty)