在MVC视图中获取模型类型

时间:2013-06-07 09:23:05

标签: c# asp.net-mvc asp.net-mvc-4 razor

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

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

一定是(我认为)某些事情:

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

任何建议都非常感谢!

2 个答案:

答案 0 :(得分:14)

您可以使用is关键字:

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

或(uglier):

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

答案 1 :(得分:4)

虽然你已经得到答案,但我建议你重新考虑整个概念。

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

如果在需要此类附加代码的视图中插入@section SomeSection { <h1>markup</h1> }并使用@RenderSection("SomeSection")在布局中进行渲染,或者在您想要的地方检查@if(IsSectionDefined("SomeSection")),该怎么办?