【问题标题】:How to get the Model type in a view如何在视图中获取模型类型
【发布时间】:2014-10-13 22:53:12
【问题描述】:

如何在视图本身中找出视图模型的类型?

我试着打电话给GetType

@model MyModel

<div>@Model.GetType()</div>

除非Model 为空,否则我会得到NullReferenceException

不幸的是,这也是不可能的

@model MyModel

<div>@typeof(TModel)</div>

TModel 在 Razor 视图的上下文中不可用。

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    试试:

    @ViewData.ModelMetadata.ModelType
    

    无论模型的值是否为 null 并且它是内置的,都可以工作。无需创建帮助器。

    【讨论】:

    • 太棒了。这比我的解决方案优雅得多。
    【解决方案2】:

    一种方法是在 HtmlHelper&lt;TModel&gt; 上创建一个辅助扩展

    public static class HtmlHelperExtensions
    {
        public static Type GetModelType<TModel>(this HtmlHelper<TModel> helper)
        {
            return typeof(TModel);
        }
    }
    

    然后你可以像这样使用它

    @using HtmlHelperExtensions
    @model MyModel
    
    <div>@Html.GetModelType()</div>
    

    【讨论】:

      【解决方案3】:

      你可以先检查它是否为null,然后获取类型,即:

      @if(Model != null) {
      <div>@Model.GetType()</div>
      }
      

      【讨论】:

      • 感谢您的回答。虽然这样可以解决异常,但这意味着如果类型为null,则不会显示该类型。
      • 所以你想要类型,不管它是否为空?如果是这样的话,我相信你无法获得空对象的类型。 - 你可以在这里查看更多信息 - stackoverflow.com/questions/930147/…。如果您添加“未知类型”的“其他”,我认为我的解决方案尽可能接近。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2017-07-04
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多