maryam
maryam

Reputation: 377

Receive an error when using "Areas" in MVC 3

I want to define two areas in MVC 3 project

"manager and main areas",

manager have some controles like main areas "the controler's Name in both have similar"

but I have implemented different methods in each controler

when I try to run my project, get this error:

Server Error in '/' Application. The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. Requested URL: /main/home Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

When I implement the project without use "Areas". I never get error, but my project is not clean

Upvotes: 0

Views: 903

Answers (2)

Terry_Brown
Terry_Brown

Reputation: 1408

I'm assuming in your Global.asax in Application_Start you have:

AreaRegistration.RegisterAllAreas();

as one of the first steps yes?

And in the Area/Main folder you have a MainAreaRegistration.cs which is something like the following:

public class MainAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Main";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {

        context.MapRoute(
            "Main_default",
            "Main/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new[] { "MyCompany.Web.Areas.Main.Controllers" }
        );
    }

}

I've found it necessary to fuly qualify routes with their appropriate namespaces (the namespace the controllers live in) once I have multiple areas to avoid confusion also. Obviously the namespace above is just how I structure mine, though whatever namespace your Main area controllers are in, that's the one to put in the file above.

Hope this helps.

Cheers, Terry

Upvotes: 2

Santas
Santas

Reputation: 421

In Global.asax try to change route to:

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
                new string[] { "YourNamespace.Controllers" } // ADD THIS
            );

Upvotes: 1

Related Questions