繁体   English   中英

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

[英]ASP.NET MVC: When to use custom HTML helper methods vs Html.RenderAction?

关于何时使用自定义辅助方法以及何时使用RenderAction以及何时简单地使用ViewData,我有点不清楚。 它们的一些功能略有重叠。

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

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

我遵循的一般准则是:

HtmlHelper方法:

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

渲染部分:

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

渲染动作:

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

ViewData的:

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

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

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

  1. 在一个控制器动作中执行整个页面或
  2. 在特定于部分视图的单独控制器操作中。

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

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

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

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

  1. 参数不被视为模型数据
  2. 它不必生成过多的标记
  3. 可以使用给定的参数生成html

如果你有一个使用模型数据的html辅助方法,或者它有很多依赖项,那么它可能更适合作为RenderPartial或RenderAction。

我也是使用RenderAction的新手

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM