2012-01-04 66 views
0

可以在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; } 
} 

我怎麼可能實現的「列」,以顯示該屬性的顯示名稱?

回答

0

如果Model.Columns是一個幾乎可以工作的列表。您需要將其更改爲這雖然:

@foreach (var col in Model.Columns) 
{ 
    @Html.LabelFor(model => col) 
} 
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) 
相關問題