2014-12-12 2 views
2

У меня есть класс Employee, который происходит от Person. Я перечисляю их на индексной странице:Как проверить тип объекта внутри вида Razor?

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.ActionLink("Details", "Details", new { id=item.Id }) 
     </td> 
    </tr> 
} 

Как проверить, если элемент Employee исключающее Person внутри этого цикла?

Например:

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @if(**item is Employee**){ 
       @Html.ActionLink("Details", "Details", "EmployeeController", new { id = item.Id},null) 
      }else{ 
      @Html.ActionLink("Details", "Details","PersonController", new { id=item.Id }, null) 
      } 
     </td> 
    </tr> 
} 

ответ

3

Это должно сделать трюк:

@if (item.GetType().BaseType == typeof(Employee)) 
{ 
    //item is of type Employee 
} 

Обновление: Я мог бы неправильно ваш "? Как проверить, если элемент Employee исключающее Person внутри этого цикла" вопрос.

A XOR, по определению, должен проверять оба значения. Зачем вам это нужно? Если объект является Employee, то он также (по вашему определению) Person. Ваш поток "If he's an Employee, pass it to EmployeeController. Else, pass it to PersonController" должен работать, так как он оценивает, является ли item первым Employee (иначе будет проблема).

Логические и условные операторы для тестирования одного против обеих сторон:

  • & (logical AND) будет проверять оба значения
  • && (conditional AND) будет проверять второе значение iff первое значение true
  • | (logical OR) проверит обе величины
  • || (conditional OR) будет проверять второе значение iff первое значение false
+0

Спасибо, с помощью исключающего я имел в виду: 'если() {} еще {}' исключающее в C# (Java наверняка) является '^'. – Yoda

+0

Действительно, так что же не работает в вашем коде? – trashr0x

+0

Наверное, теперь все отлично работает, я отвечу на следующий уик-энд, когда я проверю ваше решение, и я буду полностью уверен. Спасибо :). – Yoda

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