在MVC视图中获取模型类型

Whe*_*ill 9 c# asp.net-mvc razor asp.net-mvc-4

我正在使用MVC4和Razor,并希望从视图中确定模型类型.这应该很容易,但我不能完全正确的语法.

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

它必须(我认为)的内容如下:

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

任何建议非常感谢!

Dar*_*rov 15

您可以使用is关键字:

@if (Model is Web.Models.AccommodationModel) {
    <h1>Accomodation markup here</h1>
}
Run Code Online (Sandbox Code Playgroud)

或者(丑):

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


Bar*_*low 6

尽管您已经得到了答案,但我建议您重新考虑整个概念。

您在这里所做的是将通用布局与一些特定视图结合起来。这些视图将来可能会发生变化,要求您更改布局,它们可能会越来越多,或者有些会被删除。因此,您的方法违反了单一职责原则:更改 _layout.cshtml 的原因显然不止一个。

@section SomeSection { <h1>markup</h1> }在需要此类额外代码的视图中插入 a 并使用 渲染它在布局中怎么样@RenderSection("SomeSection"),也许还可以检查@if(IsSectionDefined("SomeSection"))您想要的位置?