2014-02-19 2 views
0

궁금 라우팅이 방법 설정을 어떻게 TMZ라는 이름의 컨트롤러를 가질 수 있으며이이 노선을 모두 처리 한 내 MVC4 응용 프로그램에서 설정 라우팅에 : ​​ASP.Net MVC4->이 나는

/TMZ/About 
/TMZ/Webinars 
/TMZ/News 
/TMZ/Conferment 
/TMZ/CustomerCare 
/TMZ/Marketing/Emails 
/TMZ/Marketing/Brochures 
/TMZ/Marketing/Print 
/TMZ/Marketing/Press 
/TMZ/Marketing/Presentations 
/TMZ/Marketing/Graphics 
/TMZ/Marketing/OCSRY 
/TMZ/Marketing/Resources 
/TMZ/Marketing/DesignStandards 
/TMZ/Marketing/Videos 
/TMZ/Marketing/PromoKits 
/TMZ/Faculty/Forms 
/TMZ/Faculty/Reports 
/TMZ/CE/Guides 
/TMZ/CE/Reports 
/TMZ/Academy/Papers 
/TMZ/Academy/Books 
/TMZ/Academy/Promotions 
/TMZ/ManualOfOperations 

을 보기 코드 :

,369 : 여기
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 

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

      routes.MapRoute("TMZ", 
        "TMZ/{action}/{subaction}/{id}", 
        new { controller = "TMZ", action = "Index", subaction = UrlParameter.Optional, id = UrlParameter.Optional }, 
        null, 
        new[] { "LicenseeArchive.Web.Controllers" }); 

      routes.MapRoute("Default", 
        "{controller}/{action}/{id}", 
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
        null, 
        new[] { "LicenseeArchive.Web.Controllers" }); 
     } 
    } 
} 

내 Global.asax.cs입니다 : 여기

내 RouteConfig.cs입니다 여기 내보기 폴더 구조를

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace LicenseeArchive.Controllers 
{ 
    public class TMZController : Controller 
    { 
     // 
     // GET: /TMZ/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult About() 
     { 
      return View(); 
     } 

     public ActionResult Marketing(string subaction) 
     { 
      string _view = "Index"; 
      switch (subaction) 
      { 
       case "Brochures": 
        _view = "Marketing/Brochures"; 
        break;     
      } 
      return View(_view); 
     } 
    } 
} 

: 그리고 여기

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace LicenseeArchive 
{ 

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

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

내 TMZController입니다 난 당신이했습니다 가정이 경우

Views 
    Account 
     Login.cshtml 
     Manage.cshtml 
     Register.cshtml 
    Home 
     About.cshtml 
     Contact.cshtml 
     Index.cshtml 
    Shared 
     _Footer.cshtml 
     _Head.cshtml 
     _HeaderBlock.cshtml 
     _Layout.cshtml 
     _LeftAside.cshtml 
     _LoginPartial.cshtml 
     _TopNav.cshtml 
     Error.cshtml 
    TMZ 
     Academy 
      Books.cshtml 
      Papers.cshtml 
      Promotions.cshtml 
     CE 
      Guides.cshtml 
      Reports.cshtml 
     Faculty 
      Forms.cshtml 
      Reports.cshtml 
     Marketing 
      Emails.cshtml 
      Brochures.cshtml 
      Print.cshtml 
      Press.cshtml 
      Presentations.cshtml 
      Graphics.cshtml 
      OCSRY.cshtml 
      Resources.cshtml 
      DesignStandards.cshtml 
      Videos.cshtml 
      PromoKits.cshtml 
     About.cshtml 
     Conferment.cshtml 
     CustomerCare.cshtml 
     News.cshtml 
     ManualOfOperations.cshtml 
     Webinars.cshtml 
    _ViewStart.cshtml 
    Web.Config 
+1

TMZ는 사이트의 루트 (경로의 정적 부분) 여야합니다. 컨트롤러는 URL의 다음 부분이됩니다. 세 번째 부분은 개별 행동입니다. –

+0

하지만 홈 컨트롤러와 계정 컨트롤러는 물론 메일 컨트롤러도 갖게 될 것입니다. 나는 지금 지역에 대해 읽고있다. 나는 해결책이라고 생각한다. – MB34

+1

기본 경로 앞에 경로를 추가해야합니다. 모든 라우터를 등록한 후에 여기에 추가합니다. –

답변

2

가장 간단한 방법은 당신이뿐만 아니라 다른 컨트롤러에서 동일한 URL 형식을 사용할 수 있습니다 의미합니다. 귀하의 TMZController는 같이 보일 것입니다 :

public class TMZController : Controller 
{ 
    public ActionResult About() 
    { 
     return View(); 
    } 

    public ActionResult Marketing(string subaction) 
    { 
     return View(); 
    } 
} 

서브 액션/ID가 모두 선택 사항이기 때문에 당신은 다음, 2, 3 또는 4 부분으로 URL을 그냥 픽업 당신의 행동에 추가 매개 변수를 구성 할 수 있습니다 내에서 필요에 따라 처리 메소드의 본문.

+1

+1 좋은 생각입니다. 이 대답은 내 것보다 낫다. 나는 인정해야한다 :) –

+0

감사합니다 :) 당신이 특별히 URL 형식을 한 컨트롤러로만 이동하고 다른 곳에서는이 형식을 절대로 원하지 않는다면 공정한 응답을 얻으려면 아마 더 잘 작동 할 것입니다. @ MB34가 어디에서나 작동하는 일반적인 접근법을 원하거나 하나의 특수한 경우를 처리하기 위해 일회용을 원 하느냐에 따라 달라집니다. –

+0

'{subaction}' "동사"를 알지 못했습니다. 그러나'{id}'가 필요하지는 않습니다. 나는 TMZ 영역을 사용하여 그것을 수행하는 절반 정도의 방법이다. – MB34

1
routes.MapRoute("TMZ", 
     "TMZ/{action}/{id}", 
     new {controller = "TMZ", action = "Index", id = UrlParameter.Optional}, 
     null, 
     new[] {"YourNamespace.Web.Controllers"}); 

routes.MapRoute("Default", 
     "{controller}/{action}/{id}", 
     new {controller = "Home", action = "Index", id = UrlParameter.Optional}, 
     null, 
     new[] {"YourNamespace.Web.Controllers"}); 

TMZ라는 이름의 컨트롤러와 그 컨트롤러에서 마케팅, 아카데미, 교수진, CE 등 다른 모든 작업을 설정했습니다

그러나 여기가 요청을 처리 할 수있는 문자열 id 매개 변수이 있어야 TMZController

  • 조치를 "나는 여기 넣어"중요한 두 가지

    1. 은이 경로는 기본 경로 전에해야 고려하는 것입니다. 이 ID는 Marketing 액션의 경우 "Resources"또는 Academy Action의 경우 "Books"와 같이 전달됩니다.

    희망이 분명합니다. Global.asax.cs

    routes.MapRoute("Default", 
         "{controller}/{action}/{subaction}/{id}", 
         new {subaction= UrlParameter.Optional, id = UrlParameter.Optional}); 
    

    이있는 "기본"경로를 수정하는 것

  • +0

    고급 라우팅 기능에 대한 Apress 서적 "Pro ASP.Net MVC4"14 장을 기반으로이 영역을 사용했습니다. – MB34

    +0

    URL에서 컨트롤러 이름을 어떻게 제거 할 수 있습니까? 내 컨트롤러는 TMZHomeController이고 내 경로는 TMZ/TMZHome/Action이어야합니다./TMZ/Action이되고 싶습니다. – MB34

    +0

    그럼 제가 말했던대로하십시오. 그것은 –