是否可以在MVC中为控制器创建Partial类?
原因:我有一个包含太多代码的控制器。该控制器包含不同报告的代码,由于代码太多,会降低代码的可读性。我想保持所有报告的控制器名称相同,所以我想为不同的报告分发代码。
如果我可以采取任何其他方式,请告诉我。
由于 Alok Shah
答案 0 :(得分:14)
是的,您可以使用部分类 - 编译器只是将它们合并到编译时以生成一个。
但是,你提到你要“分发”代码 - 如果代码要进入多个项目,那么部分代码就无法提供帮助。
您可以使用必要的操作方法创建基类控制器类(从类库项目中的System.Web.Mvc.Controller
继承),然后使用路由将类似的URL路由到不同的控制器。Here's a link to the Asp.Net Tutorial 'Creating Custom Routes'可能对此有用。如果MVC的其他核心方面你不确定的话,我会建议你仔细阅读本教程的其余内容。它并不涵盖所有内容,但它具有基础知识。
需要使用它们的Web应用程序只是拥有自己的控制器继承自那些可再发行的控制器。更好的是,如果存在不同Web应用可能需要自定义的这些报告的元素,您现在可以通过虚拟方法等创建可扩展性点。
因此"Reports/Customers"
可以路由到CustomerReportsController
而"Reports/Orders"
可以路由到OrdersReportsController
:
routes.MapRoute("CustReports",
"Reports/Customers/{action}",
new { controller = "CustomerReports", action = "Index", id = "" } );
routes.MapRoute("OrderReports",
"Reports/Orders/{action}",
new { controller = "OrdersReports", action = "Index", id = "" } );
这是解决此问题的最简单方法 - 但我认为使用Areas(链接到MSDN演练)很可能也适用,在这种情况下,您可能根本不需要使用路由,因为默认路线可能会全部完成。
答案 1 :(得分:6)
当然!
部分类是C#语言的一个特性,与MVC或您可能正在使用的任何其他框架无关。
答案 2 :(得分:0)
是。部分类实际上只是该语言的一个特性,而编译的类是一个常规的.NET类,与其他类似。
我建议您将控制器拆分为多个控制器,以确保关注点的正确分离(有一个如此大的类,您需要将其拆分为多个文件肯定会smell bad。)
答案 3 :(得分:0)
“如果我可以采取任何其他方式而不是让我知道”
怎么样:
然后,您不需要将控制器拆分为单独的类。缺点是需要花费一定的时间来构思和实现,但最终会得到更好的代码库。