9

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

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

它必须(我认为)类似于以下内容:

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

任何建议都非常感谢!

4

3 回答 3

15

您可以使用以下is关键字:

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

或者也(丑陋):

@if (Model.GetType() == typeof(Web.Models.AccommodationModel)) {
    <h1>Accomodation markup here</h1>
}
于 2013-06-07T09:24:17.060 回答
4

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

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

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

于 2013-06-07T10:05:09.013 回答
1

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

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

即使 Model 为 null,此代码也会返回类型。剃须刀的用法:

@{ var type = Html.GetModelType(); }
于 2022-02-28T12:42:21.623 回答