区域在mvc 4中不起作用

时间:2014-10-29 08:18:14

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller

我试图在区域中拆分我的模块 我的模块是    1.登录    2.用户管理员    3.大师

我创建了该区域,我的第一个启动页面是(area = login,controller = login,action = loginpage)

我的代码路由配置代码是

RouteConfig.cs

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Login", action = "Login", id = UrlParameter.Optional },
            namespaces: new[] { "SRR.Areas.Login.Controllers" }
        );


    }
}

LoginAreaRegistration.cs

    public override string AreaName
    {
        get
        {
            return "Login";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        //Trace.WriteLine("Login");
        context.MapRoute(
            "Login_default",
            "{controller}/{action}/{id}",
            new { controller = "Login", action = "Login", id = UrlParameter.Optional },
            namespaces: new[] { "SRR.Areas.Login.Controllers" }
        );
    }

UserAdminAreaRegistration.cs

public class UserAdminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "UserAdmin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "UserAdmin_default",
            "UserAdmin/{controller}/{action}/{id}",
            new { controller = "Menu", action = "MenuPrivilages", id = UrlParameter.Optional },
            namespaces: new[] { "SRR.Areas.UserAdmin.Controllers" }

        );
    }
}

这里我的起始页面登录正常,但是useradmin模块是视图没有通过错误显示它已经"无法找到资源"。

提前致谢

2 个答案:

答案 0 :(得分:1)

登录区域注册使模式定义中的区域规范失效;将“{controller} / {action} / {id}”更改为“Login / {controller} / {action} / {id}”

如果从路由注册中删除命名空间约束会发生什么?控制器(所有这些都是Login和UserAdmin)是否在正确的命名空间中?我想登录控制器正在显示,因为我上面提到的缺少区域规范,并且Login *控制器不在正确的命名空间中。

您在RegisterRoutes方法在默认路由注册之前错过了一行:

   AreaRegistration.RegisterAllAreas();

答案 1 :(得分:0)

我相信的问题是你有两次控制器'登录'和操作方法'登录',一个在区域,另一个在root。因此命名空间必须不同,但是对于两个错误的路由都有相似的命名空间。默认情况下,没有必要为默认路由指定名称空间,因为它将映射根文件。这可能是应用程序无法找到要调用的登录的原因。