代码之家  ›  专栏  ›  技术社区  ›  Alex

ASP.NET MVC正确的用户控制体系结构

  •  5
  • Alex  · 技术社区  · 15 年前

    我正在尝试学习新的ASP.NET MVC框架,希望了解使用UserControls的最佳实践。

    我理解您可以将UserControl呈现为一个部分,并从控制器向它们传递数据。理想情况下,我认为不使用代码隐藏文件是有意义的,因为这会造成违反MVC规则的诱惑。

    我将给出一个我不理解用户控件如何适应模式的示例。

    我有一个用户控件显示 最新标签(很像 堆栈溢出)。与stackoverflow i不同 希望在上显示此用户控件 我所有的页面。如果我有 管制员说问题管制员 它是用来处理来自 一些问题视图,例如视图和 细节,这是不是意味着我得去拿 问题控制器中的数据和 然后把它传递给用户控件?

    如果我创建另一个控制器,请说 搜索控制器,那么我必须 将相同的功能复制到 获取要传递给 又一部分。这不是说 两个不同的控制器正在执行 他们没有的额外东西 最初打算做什么?

    3 回复  |  直到 14 年前
        1
  •  4
  •   tvanfosson    15 年前

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

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

        2
  •  4
  •   mike nelson    14 年前

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

        3
  •  -1
  •   User    15 年前

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