获取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>
}
任何建议都非常感谢!
您可以使用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(); }