5

我正在尝试学习新的 ASP .NET MVC 框架,并想知道使用 UserControls 的最佳实践。

我知道您可以将 UserControl 呈现为部分内容,并将数据从控制器传递给它们。理想情况下,我认为没有文件隐藏代码是有意义的,因为这会产生破坏 MVC 规则的诱惑。

我将举一个我不明白 UserControls 如何适应模式的例子。

我有一个显示最新标签的 UserControl(很像 StackOverflow 上的)。与 StackOverflow 不同,我想在我的所有页面上显示这个 UserControl。如果我有一个控制器说 QuestionController 旨在处理来自某些问题视图(例如视图和详细信息)的操作,这是否意味着我必须在 QuestionController 中获取数据,然后将其传递给 UserControl?

如果我创建另一个控制器,比如 SearchController,那么我将不得不复制相同的功能来让最新的标签再次传递给一个部分。这是否意味着 2 个不同的控制器正在做他们原本不打算做的额外事情?

4

3 回答 3

4

如果您的 UserControl 出现在每个页面上,那么解决此问题的一种方法是使用一个基本控制器,您的所有控制器都从该控制器派生并通过覆盖 OnActionExecuting 方法并将逻辑放在那里为 UserControl 生成 ViewData。如果您的 UserControl 不那么普遍,但仍然在整个站点中经常使用,您可以扩展 ActionFilterAttribute 并让您的过滤器生成所需的数据。此属性可用于装饰生成使用 UserControl 的视图的控制器或操作。

在所有这些中,我假设 UserControl 的数据独立于被调用的操作。如果存在依赖关系,最好将逻辑推送到一个类(或多个类,可能使用策略)中,并在每个动作或控制器中显式生成数据(通过覆盖 OnActionExecuting)。

于 2009-04-01T11:58:19.500 回答
4

或者,使用 ASP.NET MVC 2,您现在可以使用 RenderAction 调用可以获取数据的全新控制器操作。这使您的代码更加模块化,并且更清楚数据的来源。

于 2010-04-28T05:24:27.170 回答
-1

您还可以考虑将模型类放在层次结构中。上层类(或上层类之一)将包含您的普遍用户控件所需的数据。然后,您可以在基本控制器类中加载这些常用数据。

于 2009-04-01T12:05:31.650 回答