Click here to Skip to main content
Click here to Skip to main content
Technical Blog

Change Shared folder location in an MVC 3 site

, 12 Oct 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
a detailed article on how to change the location of the Shared folder, also applies to the Views folder.



If you want to change the location of the shared folder in your MVC 3 App, then this is a must read.

When you create a new MVC 3 Web Application Project, a default folder structure is created for you that looks something like this:

01

To change the shared folder location you must do the following steps.

Move the Shared Folder to the Root

Just drag the shared folder out of the views folder to the root of your app, like so:

02

Copy the web.config

In order for the shared folder to work outside the views folder, it has to have a special web.config file within it. Just copy the one inside the views folder and paste it into the shared folder.

03

Edit the _ViewStart.vbhtml Page

Now that the _layout page has changed its locations, we have to modify the _ViewStart.vbhtml page located in the Views folder, and edit the following:

04

Remove the “/Views” so now it directs to the _layout page located in the new shared folder location.

05

Code a Custom View Engine

If you tried to browse the site, now you will get an error like this one:

06

That is happening because MVC is using the default locations for the partial views, so it's still looking for the _LogOnPartial.vbhtml in its old location, but you moved that file to a new location in the root of your app.

To change the default file location for the whole site, we need to create a new class that inherits from RazorViewEngine.

Public Class MyCustomViewEngine
    Inherits RazorViewEngine

    Sub New()

        MasterLocationFormats = New String() {"~/Shared/{0}.vbhtml"}

        ViewLocationFormats = New String() {"~/Views/{1}/{0}.vbhtml", _
				"~/Shared/{0}.vbhtml"}

        PartialViewLocationFormats = New String() _
		{"~/Views/{1}/{0}.vbhtml", "~/Shared/{0}.vbhtml"}

    End Sub

End Class

Here, we set new locations for the Master, Views, and PartialViews.

Replace the Default View Engine and Test

All we have to do now is plugin this new custom engine, go to the Global.asax file and add the following to the Application_Start():

  Sub Application_Start()
        AreaRegistration.RegisterAllAreas()

        ViewEngines.Engines.Clear()
        ViewEngines.Engines.Add(New MyCustomViewEngine)

        RegisterGlobalFilters(GlobalFilters.Filters)
        RegisterRoutes(RouteTable.Routes)
    End Sub

Now if you run the app, you will notice that it all works with the shared folder new location.

Summary

We managed to change the shared folder location and replace the default razor view engine with our own implementation that changes the locations of the master, views, and partial views of the app.


Filed under: .NET Tagged: MVC

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Buaziz
Software Developer (Senior) KUFPEC
Kuwait Kuwait
No Biography provided
Follow on   Twitter   Google+

Comments and Discussions

 
GeneralMy vote of 4 PinmemberHoward Richards14-Mar-13 3:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.141220.1 | Last Updated 12 Oct 2011
Article Copyright 2011 by Buaziz
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid