【问题标题】:Get Model type in MVC View在 MVC 视图中获取模型类型
【发布时间】:2013-06-07 09:23:04
【问题描述】:

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

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

它必须(我认为)类似于:

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

非常感谢任何建议!

【问题讨论】:

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


    【解决方案1】:

    您可以使用is 关键字:

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

    或者也(丑陋的):

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

    【讨论】:

    • 谢谢大家,为了面子,我确定我尝试了您上面建议的第二种方法,但没有奏效。我现在又试了一次,它确实有效!一定是笔误什么的。无论如何,非常感谢。
    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,公平点。我也会看看使用这种方法。它更多的是用于快速修复_Layout 中保存的模态内容,但仍然是一个好点 - 谢谢。
    【解决方案3】:

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

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

    即使模型为空,此代码也会返回类型。在剃须刀中的用法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2019-02-26
      相关资源
      最近更新 更多