2011-12-28 3 views
2

입니다. 모듈에 대한 경로를 자동 등록하고 admin에 대한 경로를 등록하려고합니다. 잘등록 경로 유형은 Admin/{controller}/{action}/{id}

public class ModulSetup : BaseModule 
{ 
    public override void Setup() 
    { 
     this.SetupViewEngine(); 
     this.SetupControllers(); 
    } 

    public override void SetupRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "Default", 
      string.Empty, 
      new { controller = "Home", action = "Index" }); 
    } 

    protected override void SetupViewEngine() 
    { 
     ViewEngines.Engines.Add(new CoreViewEngine()); 
    } 

    protected override void SetupControllers() 
    { 
     ControllerBuilder.Current.DefaultNamespaces.Add("SGN.Core.Controllers"); 
    } 
} 

하지만 관리를 위해, 내가 할 404

public class AdminSetup : BaseModule 
{ 
    public override void Setup() 
    { 
     this.SetupViewEngine(); 
     this.SetupControllers(); 
    } 

    public override void SetupRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "Admin", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Site", action = "Index" }); 

    protected override void SetupViewEngine() 
    { 
     ViewEngines.Engines.Add(new AdminViewEngine()); 
    } 

    protected override void SetupControllers() 
    { 
     ControllerBuilder.Current.DefaultNamespaces.Add("SGN.Core.Admin.Controllers"); 
    } 
} 

예 작업 모듈 등록 . 나는 404 :(

가 UPDATE 내가 만들려고

이 AreaAwareViewEngine 호 도움이 네게 How to set a Default Route (To an Area) in MVC

쓰기가 아니라 컨트롤러 클래스 사이트를

namespace SGN.Core.Admin.Controllers 
{ 
using System.Web.Mvc; 
using SGN.Framework.Controller; 

public class SiteController : AdminController 
{ 
    public ActionResult Index() 
    { 
     return this.View(); 
    } 
} 
} 

이 내가하려고 할 때 http://localhost:777/Admin/Site/ 서버 반환로 이동

업데이트

나는이 URL을 사용해보십시오 http://localhost:777/Admin/Site/Index. 하지만 이건 좋지 않아. 그리고 주인님은 일하지 않습니다.

UPDATE

나는 영역을 사용하는 다른 프로젝트의 체크를 위해 RouteDebugger를 사용합니다. 지역을 사용할 때 추가 할 내용. DataTokens에서 이해하는 방법 3 매개 변수 추가

네임 스페이스 = SGN.Web.Areas.Admin., 지역 = 관리자, UseNamespaceFallback =이

* 거짓 나는 이것이 = SGN.Core.Admin을

네임 스페이스를 매개 변수 추가하려고합니다., 지역 = 관리자, UseNamespaceFallback이 = 거짓 *

하지만 도움이되지

UPDATE

는 여기 How to set a Default Route (To an Area) in MVC

내 클래스 AreaRegistration을 작성하는 방법 클래스 AreaAwareViewEngine을 만들어

namespace SGN.Web.Admin 
    { 
using System.Web.Mvc; 

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 {area="Admin", controller = "Site", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
} 

그리고 AdminViewEngin을 만듭니다. 전자 AreaAwareViewEngine

에서
namespace SGN.Core.Admin 
{ 
using System.Web.Mvc; 

using SGN.Framework; 

public class AdminViewEngine : AreaAwareViewEngine 
{ 
    public AdminViewEngine() 
    { 
     AreaMasterLocationFormats = new[] { "~/Admin/Views/Shared/admin.cshtml" }; 

     AreaPartialViewLocationFormats = new[] { "~/Admin/Views/{1}/Partials/{0}.cshtml", "~/Admin/Menu/{0}.cshtml" }; 

     AreaViewLocationFormats = new[] { "~/Admin/Views/{1}/{0}.cshtml", "~/Admin/Menu/{0}.cshtml" }; 

     ViewLocationFormats = AreaViewLocationFormats; 
     PartialViewLocationFormats = AreaPartialViewLocationFormats; 
     MasterLocationFormats = AreaMasterLocationFormats; 
    } 

    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath) 
    { 
     return new RazorView(controllerContext, partialPath, null, false, FileExtensions); 
    } 

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath) 
    { 
     if (string.IsNullOrEmpty(masterPath)) 
     { 
      masterPath = AreaMasterLocationFormats[0]; 
     } 
     var view = new RazorView(controllerContext, viewPath, masterPath, true, FileExtensions); 
     return view; 
    } 
} 
    } 

는 일 내가 http://localhost:777/Admin/Site/에 가서 내가 뭔가 간단한 주문 문제가 될 수 http://localhost:777/Admin

답변

0

에 가면 작동하지 않을 경우. 핵심 경로보다 먼저 관리 경로가 추가 되었습니까? 나는 그것이 첫 번째 매칭 루트를 취할 것이라고 믿고 다른 것들 앞에 관리자 루트가 추가되지 않는다면 그 중 하나가 일치하고 Admin 컨트롤러 (존재하지 않음)로 리디렉션되고있는 것 같습니다. Haack의 RouteDebugger으로 보길 원할 것입니다.

또한 기본 제공 영역 기능을 사용하지 않는 이유가 있습니까? 이것은 완벽하게 일치하는 것 같습니다.

+0

RouteCollection에서 Admin에 대한 Route는 두 번째 순위입니다. RouteDebugger를 사용하여 경로를 테스트 할 수 없습니다. 왜냐하면 return 404 – Greg

+0

나는 폴더 영역을 사용하고 싶지 않기 때문에 영역을 사용하지 않는다. – Greg

0

먼저 관리자가 아닌 기본 경로보다 먼저 "Admin"경로가 매핑되어 있는지 확인하십시오. 또한, 나는이에 관리자 경로를 변경할 것 :

routes.MapRoute(
     "Admin", 
     "Admin/{controller}/{action}/{id}", 
     new { controller = "Site", action = "Index", id = UrlParameter.Optional }); 

그런 식의 id 경로 매개 변수는 UrlParameter.Optional되는 기본값이 있습니다. 초기 경로는 id의 기본값이 아니므로 필요합니다.

+0

이 코드는 도움이되지 않는다. – Greg

+0

@Greg는 기본 경로 앞에이 경로를 넣는다. –

+0

RouteCollection에서 Admin에 대한 Route가 두 번째로 순위가 매겨집니다. 첫 번째 routes.IgnoreRoute ("{resource} .axd/{* pathInfo}"); – Greg