2012-02-24 64 views
0

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

我打算(在mvc3中)是在应用程序的所有视图上都有一些额外的属性。

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

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

对不起忘了提,我的视图引擎是剃刀

+0

我不清楚你的要求。你问是否有可能继承'Controller'将一些属性添加到新的基类,然后从新的基类派生你的控制器?如果是这样,那么是非常有可能的。 – asawyer 2012-02-24 18:56:57

+0

取决于你所说的“额外属性”。 – muratgu 2012-02-24 19:10:17

回答

1

如果您额外的属性意味着是特定的用户界面,那么你可以定义一个母版页和使用,在所有视图页面。如果它们的目的是作为值属性,那么你可以创建一个基本模型并在你的模型类中继承它,然后使用这些模型将其提供给所有的视图。如果这些都不适合您的目的,那么您可以尝试延伸System.Web.Mvc.ViewPage,但我不确定它是否是最佳做法

1

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

虽然它是可能从继承派生的ViewPage,它通常不会完成。根据你想要做什么,可能有更好的解决方案。

也许如果你澄清你在做什么,它可能会帮助我们更好地帮助你。

+0

在此先感谢,忘记提及我使用剃须刀。并想象我总是有一些价值在我的会议(例如),我假装是得到一种方式来获取一个属性来做类似这样的事情:somestring @MySessionProp somestring – 2012-02-24 19:18:42

+1

从视图访问会话值不是一个好主意。这打破了查看和控制器的分离。会话从控制器访问。如果您在视图中需要它,请将其传递给视图,不要让所有会话值在您的视图中可用。例如,将该值作为ViewBag或ViewData对象传递,或者将其添加到您的模型中。这是一个坏主意的原因是它使视图无法测试。我知道你可能没有进行单元测试,但是你为单元测试做的同样的事情会让你的代码更易于维护。 – 2012-02-24 22:05:43