助手是我们的“自定义服务器控件”

时间:2010-02-21 03:16:53

标签: asp.net asp.net-mvc

我的理解是Helper方法真的是你可以做的核心逻辑,我们可以在ASP.NET中使用自定义控件吗?例如,我为一个使用经典ASP.NET的.com工作。我们网站的性质非常复杂,因此我们重复使用并为数千种产品呈现不同的形式。每个产品都可以有不同的配置形式。我们有一个非常完整的RenderForm.cs自定义服务器控件,可以执行所有逻辑。基于数据库中表格的一些配置设置,它说好了,对于产品1123,它读取设置(我们的用户从我们的内部管理系统中构思)并接受并吐出动态表单(使用文字控件,而不是到了p age。

所以我现在正在考虑MVC。是的,这一切都在视图中完成。好吧,部分。您仍然需要在某些.cs中使用某些自定义逻辑,而这些逻辑并非全部嵌入您的视图中。如果认为你不会有一些会吐出一些HTML的类,那将是愚蠢的。就像一些非常硬的核心广泛帮助方法。

所以我的问题是,你现在做自定义服务器控制类型逻辑的辅助方法或类吗?它基本上是一个相同的概念,因为你需要一个地方将你的“硬核”HTML渲染逻辑放在除控制器之外的某些类中。您的控制器不负责渲染。因此,我认为辅助方法就是所谓的自定义服务器控件,就像我在经典ASP.NET中一样,比喻说。我只需要一个是或者现在就是这样的共识,即帮助方法是我的所有硬核可重用逻辑,它将html吐出到页面以及我可以在我的视图中嵌入自定义控件的地方吗?看起来像。

“Helpers本质上是静态类,旨在包含UI逻辑,否则会破坏UI。将这些视为UI实用程序。” link text

2 个答案:

答案 0 :(得分:1)

是的,这是正确的。如果你做得对,你将从MVC为你提供的HTML助手开始,然后逐步建立你自己的助手,为你的特定项目做更多的帮助。您可以到达视图只有几行代码的位置,例如“渲染产品1123的整个视图”。帮助程序将成为您自己的项目特定渲染器“语言”,您将以非常干燥(不要重复自己)的方式应用配置,验证和其他所有内容。这是惊人的。

更新:当然,只有演示文稿的东西应该放在你的助手中。目标是在您的观点中保持干净。您仍然需要小心将属于ViewModel的内容放入ViewModel中。

答案 1 :(得分:0)

我会说“不”......或者说“只有你必须去的地方”。通常,您可以在Controller(或服务)中执行逻辑,最终将所需的所有数据传递回ViewData中的View。有时这意味着来自一个ControllerAction的多个视图,更少的意思是它在视图中意味着逻辑,有时它意味着HtmlHelpers。

当你决定使用Helpers时,应该考虑到这意味着生成的标记在你的标记中不会......好吧。如果您(或后来聘请)设计师,那可能是个问题。或者,如果您需要对布局进行微小更改,那么您先去哪里?你的观点还是帮助者?

[编辑]还应该问问自己:我的代码在哪里更容易进行单元测试?在一个只传递View Data的Service类中,或者在构建整个HTML块并将它们作为String返回的类中?如果您正在使用TagBuilder,那么TagBuilder的实现中的任何更改(即使更改空白处理)都会在Helper上打破测试而不会更改代码。

我不是说“不要使用助手”,我说的是“不要滥用助手”。