Where can I put custom classes in ASP.NET MVC?

I have some utility functions and Pagination function. I want to create classes named Utility and Pagination for these functions respectively, so that I can use these class function in more than one controllers.

So where can I put these class in my folder structure, and how can I access then?


Solution 1:

You can either create a new Folder called Helpers under the root and keep your classes physically there. I would keep my classes under a different namespace called Helpers

namespace MyProject.Helpers
{
  public class CustomerHelper
  {
        //Do your class stuff here
  }
}

To accees this in my other classes (Ex : Controllers) ,I can either use the fully qualified name

var custHelper=new MyProject.Helpers.CustomerHelper(); 

OR

add a Import statement at the top so that i can skip the fully qualified name

//Other existing Import statements here
using MyProject.Helpers;
public class RackController : Controller
{
  public ActionResult Index()
  {
     var custHelper=new CustomerHelper(); 
     //do something with this  
     return View();    
  } 
}

If you think your Helper method can be used in another project also, You may consider to keep them physically in a separate project(of type class library). To use this in your project, Add a reference to this project and use it like what we did above (use either fully qualified name or use import statement)

Solution 2:

You can put your helper classes anywhere you find logical and convenient.

Personally I create a folder Helpers off of the main project folder.

You can use them anywhere, either by fully qualifying the class name or with a using statement.

In a Razor view, you would use

@using MyProject.Helpers

In a controller or model you would use

using MyProject.Helpers;

Solution 3:

Another approach could be creating a Base Controller class and adding your common logic there, and deriving your controller from your base controller.

public class MyBaseController:Controller
{
   public void CommonFunction()
    {
    }
}

Use like...

public HomeController:MyBaseController
{
}

Solution 4:

You can create a new project,and then put the common classes into the project . If you want to use them,just Add Reference the project.