2016-02-09 3 views
0

Я создаю кучу страниц Razor для поддержки справочных таблиц. Базовая структура в контексте данных такова:MVC/Razor DisplayAttribute при использовании наследования

public class RefTableBase { 
    public int Id {get;set;} 
    public string Value {get;set;} 
} 

public class UserType: RefTableBase {} 

public class ReferenceType: RefTableBase {} 

Рабочие места для строительных лесов Razor работают правильно. Тем не менее, когда у меня есть класс, который вызывает таблицы с ужасом, страницы не отображают то, что я ожидаю.

public class SomethingImportant { 
    public int Id {get;set;} 
    public string Name {get;set;} 

    public int UserTypeId {get;set;} 
    public virtual UserType UserType {get;set;} 

    public int ReferenceTypeId {get;set;} 
    public virtual ReferenceType ReferenceType {get;set;} 
} 

Когда index.cshtml страница scaffolded, заголовки таблицы выглядит следующим образом:

@model IEnumerable<Models.SomethingImportant> 

<table class="table"> 
    <tr> 
     <th>@Html.DisplayNameFor(model => model.Id)</th> 
     <th>@Html.DisplayNameFor(model => model.Name)</th> 
     <th>@Html.DisplayNameFor(model => model.UserType.Value)</th> 
     <th>@Html.DisplayNameFor(model => model.ReferenceType.Value)</th> 

Но когда страница фактически отображаются в браузере, заголовки столбцов показывают

Id Name Value Value 

Когда я хочу:

Id Name User Type  Reference Type 

Я попытался использовать DisplayAttribute для членов класса, но это не сработало.

public class SomethingImportant { 
    // ........... 
    [Display(Name="User Type")] 
    public int UserTypeId {get;set;} 
    public virtual UserType UserType {get;set;} 
    // ........... 
} 

Вне пропуска Наследование и фактически установив DisplayAttribute для всех и каждого класса в производных классах, есть ли способ я могу получить его, чтобы показать, как я хочу?

+1

я должен был бы быть '@ Html.DisplayNameFor (модель => model.UserType)' и 'DisplayAttribute' применяется к' UserType' –

+0

UserType недвижимость в SomethingImportant не Disply атрибут – DanielVorph

+0

просто удалить .Value из них две последние строки. (т. е. model.UserType.Value -> model.UserType) –

ответ

2

Вы можете просто поставить атрибут Display на свойства в вопросе:

public class SomethingImportant { 
    public int Id {get;set;} 
    public string Name {get;set;} 

    public int UserTypeId {get;set;} 
    [Display(Name="User Type")]//here 
    public virtual UserType UserType {get;set;} 

    public int ReferenceTypeId {get;set;} 
    [Display(Name="Reference Type")]//and here 
    public virtual ReferenceType ReferenceType {get;set;} 
} 

И удалить вызова .Value на представлении.

<th>@Html.DisplayNameFor(model => model.Id)</th> 
<th>@Html.DisplayNameFor(model => model.Name)</th> 
<th>@Html.DisplayNameFor(model => model.UserType)</th> 
<th>@Html.DisplayNameFor(model => model.ReferenceType)</th> 

Если вам нужно .Value и это свойство этого класса, вы можете поставить атрибут Display на те свойства, вместо этого.

+1

Из всех различных комбинаций, которые я пробовал ... Это сработало отлично! Спасибо огромное! –

Смежные вопросы