ASP.NET MVC:何时使用自定义HTML帮助程序方法vs Html.RenderAction?

时间:2010-02-10 19:32:57

标签: asp.net asp.net-mvc

对于我来说,何时使用自定义辅助方法以及何时使用RenderAction以及何时只使用ViewData,我有点不清楚。他们的一些功能略有重叠。

例如,如果我要创建一个类别导航栏,我是否会创建一个新的辅助方法并将其放在某个局部视图中?我最初虽然这样做,但我在一些博客上读到使用RenderAction代替。我一直在思考,并且可以使用一些帮助而不仅仅是这个例子,但总的来说。

假设类别列表来自某些数据源。

4 个答案:

答案 0 :(得分:18)

我遵循的一般指南是:

HtmlHelper方法:

  1. 用于标记标记。我使用帮助程序来确保我的表单字段,输入按钮和图像标记使用一致的标记。
  2. 在生成的标记最小时使用。少量文本,表单字段标记等。我不使用帮助程序来呈现完整的域对象。
  3. 操作少量离散参数。如果我需要迭代一个集合并显示一些东西,那就是部分的。如果我需要大量的输入,那也是一个部分。
  4. 不包含任何业务逻辑,只包含表示逻辑。参数通常是解决方案域中的对象,而不是业务/问题域。
  5. 通常范围非常广泛,适用于大部分应用程序。
  6. 渲染部分:

    1. 当我想将大视图分解成更小的片段时使用。该模型应该是“主要”视图模型的子集。
    2. 部分视图通常仅由某些控制器或区域使用。
    3. 渲染动作:

      1. 当我想创建可以以各种方式组合的小块功能时使用。
      2. 最常用于生成适用于许多控制器或区域的内容,例如导航控件。
      3. <强>的ViewData:

        我将使用ViewData跟踪适用于所有视图的全局数据,例如当前用户。如果我需要一种显示此数据的一致方法,我通常会为它创建一个部分,然后在母版页中执行RenderPartial()。

答案 1 :(得分:2)

首先,这可能很清楚,但是让我们说:类别业务逻辑(例如从数据源获取数据)不应该在Html帮助器或用户控件中:它应该在控制器中完成。

1)RenderPartial / HtmlHelper与2)RenderAction之间的区别在于 控制器这个业务逻辑是:

  1. 在执行整页或
  2. 的一个控制器操作中
  3. 在特定于部分视图的单独控制器操作中。
  4. 如果您在几乎每个页面中使用类别数据,我认为在页面控制器操作级别上为每个页面获取它并没有错误,并将其传递给视图数据。当然你会使用一些机制(自定义模型基类,扩展控制器......),这样你就不会在每个动作中都有相同的类别获取函数调用(假设你有很多)。

    如果某些页面视图选择显示类别,而某些页面视图可能还有一些类别控件具有不同的业务逻辑,那么RenderAction肯定会更好。即使在上述情况下,RenderAction也很好:它将类别提取与控制器操作中的其他数据分开。

    然后是否使用RenderPartial或HtmlHelper ...对我而言,HtmlHelpers应该更通用,而不是特定于特定视图或模型,但是我认为,这比MVC视角中的明确规则更重要:两者都应该是只是查看逻辑。

答案 2 :(得分:1)

当场景符合以下条件时,我会选择html辅助方法:

  1. 参数不被视为模型数据
  2. 不必生成过多的标记
  3. 可以仅使用赋予它的参数生成html
  4. 如果你有一个使用模型数据的html辅助方法,或者它有很多依赖关系,那么它可能更适合作为RenderPartial或RenderAction。

答案 3 :(得分:0)

我也是使用RenderAction的新手

但是当我需要为特定的显示器加载数据时,我现在就去了 的RenderAction

非常适合加载标记云,标记云显示在每个页面上,但数据并非特定于页面。

相关问题