Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Partial class for controller

Is it possible to create a Partial class for the controller in MVC?

Reason : I have a controller which contains too many code. This controller contains the code for different reports and due to too many code it reduces the readability of the code. I want to keep controller name same for all reports so I want to distribute code for the different reports.

If i can do any other way than do let me know.

Thanks Alok Shah

like image 210
alok_dida Avatar asked Mar 13 '12 09:03

alok_dida


People also ask

Can partial view have controller?

It does not require to have a controller action method to call it. Partial view data is dependent of parent model. Caching is not possible as it is tightly bound with parent view (controller action method) and parent's model.

What is partial class example?

A partial class is a special feature of C#. It provides a special ability to implement the functionality of a single class into multiple files and all these files are combined into a single class file when the application is compiled. A partial class is created by using a partial keyword.

What is partial class for?

Partial Class is a unique feature of C#. It can break the functionality of a single class into many files. When the application is compiled, these files are then reassembled into a single class file. The partial keyword is used to build a partial class.

What is the base class for controller?

On MSDN: "The base class for all controllers is the ControllerBase class, which provides general MVC handling. The Controller class inherits from ControllerBase and is the default implement of a controller."


2 Answers

Yes you can use a partial class - the compiler just merges them all up a compile-time to produce one.

However, you mention you want to 'distribute' code - if the code is to go into multiple projects then partials are not going to help.

You can instead create base controller classes (that inherit from System.Web.Mvc.Controller in a class library project, with the necessary action methods, and then simply use routing to route similar urls to different controllers. Here's a link to the Asp.Net Tutorial 'Creating Custom Routes' which might be useful for that. I hightly recommend looking through the rest of the tutorial if there are other core aspects of MVC you're not sure about. It doesn't cover everything, but it does the basics.

A web application that needs to use those then simply has its own controllers inherit from those redistributable ones. Even better, you can now create extensibility points through virtual methods etc if there are elements of these reports which different web apps might need to customise.

So "Reports/Customers" could route to a CustomerReportsController and "Reports/Orders" could route to an 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 = "" } );

This is the most simplistic approach to this problem - but I think using Areas (link is to MSDN walkthrough) would most likely also be applicable, in which case you might not need to use routing at all because the default route would probably do it all.

like image 144
Andras Zoltan Avatar answered Oct 18 '22 18:10

Andras Zoltan


Of course!

Partial classes are a feature of the C# language and bare no relation to MVC or any other framework you may be using.

like image 34
Moo-Juice Avatar answered Oct 18 '22 17:10

Moo-Juice