asp.net-mvc - 如何检查 Razor View 中对象的类型?

标签 asp.net-mvc asp.net-mvc-5.1

我有一个派生自PersonEmployee类。我将它们列在索引页上:

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

如何检查此循环内的 item 是否为 Employee xor 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>
}

最佳答案

这应该可以解决问题:

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

更新:我可能误读了您的“如何检查此循环内的项目是否是 Employee xor Person?”问题。

根据定义,XOR 必须测试这两个值。为什么你需要这样做?如果一个对象是一个Employee,那么他(根据您的定义)也是一个Person。您的 “如果他是 Employee,将其传递给 EmployeeController。否则,将其传递给 PersonController” 应该可以工作,因为它正在评估 item 是否是 Employee 首先(反之亦然会出现问题)。

用于测试一方与双方的逻辑和条件运算符是:

  • &(逻辑 AND)将测试这两个值
  • &&(条件 AND)将测试第二个值 iff 第一个值为 true
  • |(逻辑或)将测试这两个值
  • ||(条件 OR)将测试第二个值 iff 第一个值为 false<

关于asp.net-mvc - 如何检查 Razor View 中对象的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450487/

相关文章:

c# - 如何测试方法是否在特定输入上引发异常

asp.net-mvc - 部分 View MVC 5 : "A space or line break was encountered after the "@"character

entity-framework-6 - Entity Framework 种子方法异常

javascript - Javascript 如何不打印我的文本框按钮并打印我的照片?

asp.net-mvc - FontAwesome fontawesome-webfont.woff2?v=4.5.0 404 未找到

c# - 如何从 Nuget 包动态加载 Mvc Controller 。 Docker 容器问题

c# - 将 HttpWebResponse 转换为 HttpResponseMessage

c# - 带有混合标记的 Razor 语法

c# - 依赖注入(inject) - Controller 工厂

asp.net-mvc - 想要使用NHibernate将选定的(即多个)枚举保存为字符串