在ASP.NET MVC中创建用户控件时,构建代码的最佳方法是什么,调用使用用户控件的视图的控制器并不都必须了解这些控件?在ASP.NET MVC中使用用户控件时,我想知道一个维护DRY的好方法.
请注意,此问题仅与需要特殊处理和回发逻辑的用户控件有关.对于仅用于查看的用户控件(使用RenderPartial)或者需要进行一些预处理才能创建适当的viewmodel(使用RenderAction),为创建好的DRY代码创建了好的DRY代码.
此外,此问题仅适用于在应用程序中实现可重用的控件.在这一点我不担心应用程序之间的可重用性.
给出一个具体的例子,假设我想创建一个“快速添加”用户控件,它包含三个输入字段,名字,姓氏和公司名称以及提交按钮.当使用QuickAdd功能时,应该执行以下步骤,而不管控件所在的页面如何:
>确认字段不为空,如果是,则显示一个指示符.
>执行查询到存储库,看看公司是否已经存在,如果没有;创建它.
>创建与现有公司或新创建的公司相关联的新联系人
>重新渲染现有页面.如果没有验证错误,用户将再次看到完全相同的页面,否则与验证错误的页面相同.
实现DRY的主要问题与调用包含部分视图的视图的所有控制器有关,必须具有从快速添加处理表单提交的Action方法.即使我将处理信息的逻辑分解成一个单独的控制器,并且从每个其他控制器调用该方法,似乎是一个负担,每个控制器调用具有可重用控件的视图必须具备这些知识.
我查看的另一个选项是使可重用的控件总是提交给特定的操作方法/控制器,但是该控制器无法知道如何针对调用包含的视图的特定控制器适当地重新填充模型可重复使用的控制(在步骤4).
我知道MVC 2中有一个子控制器(来自这个问题ASP.NET MVC – Contained User Controls),但是由于还没有,所以在保持DRY的同时,最大限度地构建代码以实现最大的可重用性?
是否有一个替代方法是让所有控制器调用使用可重用控件(具有上述特征)的视图,必须有一个Action方法来处理来自控件的信息?