【问题标题】:ASP.NET MVC3 View Class InheritanceASP.NET MVC3 视图类继承
【发布时间】:2012-03-15 05:38:00
【问题描述】:

在我的项目中,我使用的是 ASP.NET MVC3,而我的背景来自传统的 asp.net,我的问题与“与 asp.net webforms 相比”与代码隐藏上可能的继承有关。

我打算(在 mvc3 中)在应用程序的所有视图上提供几个额外的属性。

是否可以将我的额外属性添加到我的视图中,或者我需要使用“辅助方式”作为解决方法?

请注意,我的问题不在模型级别,而是针对视图 (UI)。

抱歉忘了说我的视图引擎是 Razor

【问题讨论】:

  • 我不清楚您的要求。您是否在问是否可以继承 Controller 向新基类添加一些属性,然后从新基类派生控制器?如果是这样,那么是的,很有可能。
  • 取决于您所说的“额外属性”。

标签: asp.net-mvc-3 inheritance view


【解决方案1】:

是的,默认情况下 MVC 视图继承 System.Mvc.ViewPage。如果您使用的是强类型视图,那么它就是System.Mvc.ViewPage<model>,您的@model 声明将传递给通用ViewPage<> 类。

虽然可能从派生的 ViewPage 继承,但通常不会这样做。根据您想做什么,可能会有更好的解决方案。

也许如果你澄清你在做什么,它可能会帮助我们为你提供更多帮助。

【讨论】:

  • 提前谢谢,忘了说我用的是剃须刀。并想象我的 Session 总是有一些价值(例如),我假装是获得一种方法来获得一个属性来做类似的事情:somestring @MySessionProp somestring
  • 从视图中访问会话值不是一个好主意。这打破了视图和控制器的分离。 Session 是从控制器访问的。如果您在视图中需要它,请有意将其传递给视图,不要只是让所有会话值在您的视图中可用。例如,将值作为 ViewBag 或 ViewData 对象传递,甚至将其添加到您的模型中.这是一个坏主意的原因是它使视图无法测试。我知道您可能没有进行单元测试,但是您为单元测试所做的相同操作使您的代码更易于维护。
【解决方案2】:

如果您的 额外属性 是特定于 UI 的,那么您可以定义一个母版页并在您的所有视图页面上使用它。如果它们是值属性,那么您可以创建一个基本模型并在模型类中继承它,然后使用这些模型的所有视图都可以使用它们。如果这些都不适合您的目的,那么您可以尝试扩展 System.Web.Mvc.ViewPage,但我不确定这是否是最佳实践

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2012-05-19
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多