ASP .NET MVC正确的UserControl架构

Ale*_*lex 5 asp.net-mvc user-controls partial-views

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

我知道您可以将UserControl作为部分渲染,并从控制器传递数据.理想情况下,我认为没有代码隐藏文件是有道理的,因为这会产生破坏MVC规则的诱惑.

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

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

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

tva*_*son 4

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

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