获取MVC视图中的模型类型

本文关键字:模型 类型 MVC 视图 获取 | 更新日期: 2023-09-27 18:17:32

我正在使用MVC4和Razor,并希望从视图内确定模型类型。这应该很容易,但我不太能够得到正确的语法。

我想这样做,所以我可以有条件地显示不同的标记在_Layout.cshtml页面取决于当前视图和模型,它正在使用。

一定是(我认为)类似以下内容:

 @if (Model.GetType() == Web.Models.AccommodationModel) { // Obviously not correct
      <h1>Accomodation markup here</h1>
 }

任何建议都非常感谢!

获取MVC视图中的模型类型

您可以使用is关键字:

@if (Model is Web.Models.AccommodationModel) {
    <h1>Accomodation markup here</h1>
}

或also(丑):

@if (Model.GetType() == typeof(Web.Models.AccommodationModel)) {
    <h1>Accomodation markup here</h1>
}

虽然你已经有了答案,但我还是建议你重新考虑一下整个概念。

你在这里做的是将通用布局与一些特定视图耦合起来。这些视图将来可能会改变,需要你改变布局,它们可能会越来越多,或者有些会被删除。所以你的方法打破了单一职责原则:显然有不止一个原因改变_layout.cshtml。

在视图中插入@section SomeSection { <h1>markup</h1> }需要这样的额外代码,并在使用@RenderSection("SomeSection")的布局中渲染它,也许还检查@if(IsSectionDefined("SomeSection"))在你想要的地方?

您可以使用这样的扩展方法:

public static Type GetModelType<T>(this IHtmlHelper<T> html) => typeof(T);

即使Model为空,该代码也返回该类型。在razor中的用法:

@{ var type = Html.GetModelType(); }