区域中找不到资源

时间:2013-10-03 03:44:23

标签: asp.net-mvc asp.net-mvc-4

我在MVC中创建了一个区域,然后我创建了一个简单的控制器,我无法查看区域或我网站部分内的任何页面是否有人知道为什么以及如何解决此问题。我在一段时间内创建了一个带有Area的项目并且没有任何问题,我不知道发生了什么变化,或者我是否需要更改某些内容以使其工作,有人可以帮助我。

有些地方没有注册。

namespace RedPlanet.Areas.admin.Controllers
{
    public class CategoryController : Controller
    {
    }
}

区域:

public class adminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "admin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "admin_default",
            "admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

Global ASAX:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<DataContext>());
    }
}

1 个答案:

答案 0 :(得分:0)

在为应用程序注册管理区域和主要路由的路由时,需要指定命名空间。

主要路线:

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new string[] { "RedPlanet.Controllers" }// specify the namespace
);

在您的\ Areas \ admin \ adminAreaRegistration.cs文件中,您需要修改RegisterArea()方法,如下所示:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "admin_default",
        "admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new[] { "RedPlanet.Areas.admin.Controllers" }// specify the namespace
    );
}

更新:
如果您使用的是Guid,则应将操作方法​​的参数类型更改为Guid:

public ActionResult Details(Guid guid)
{
    //code
    return View(model); 
}

然后为此创建新路线;

routes.MapRoute("FooRouteName",
        "Controller/Action/{guidParam}",
         new { controller = "Category", action = "Index" },
         new { guidParam = @"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$" }
    );