可以在Razor视图中间接访问模型的属性吗?

时间:2012-01-04 09:40:41

标签: asp.net-mvc-3 razor

可以在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'来显示属性的显示名称?

2 个答案:

答案 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)