2011-11-05 2 views
2

가 나는 경우MVC의 경로에서 중괄호는 무엇을 의미합니까?

...

routes.MapRoute("Music", "Music/{name}", new { }); 

는 중괄호의 목적은 무엇인가 ... MVC 프로젝트 내 경로를 설정하지만, 중괄호에 대해 조금 혼란 메신저 해요 이름 근처에 뭔가 전달 되니? 또는 기본 객체를 전달하면이 맵이 무언가에 매핑됩니까?

+0

이 시도 : [링크] [1] [1] : http://stackoverflow.com/questions/5947694/routing-mvc-asp-net –

답변

5

라우팅 요청에 사용되는 매개 변수 이름입니다. 예를 들어 기본 경로는 그 중 세 가지를 정의

{controller}/{action}/{id} 

controlleraction 매개 변수는 컨트롤러 액션을 찾기위한 것입니다. id 매개 변수는 해당 조치의 입력으로 사용될 수 있습니다.

사용자 지정 경로를 정의 할 때 controlleraction 매개 변수를 제공해야합니다. URL에 정의되지 않은 경우 요청이 해당 경로와 일치 할 때 실행할 동작을 MVC가 알 수 있도록 기본값을 제공해야합니다. 정의 당신 같은 id 또는 name 같은

routes.MapRoute("Music", 
        "Music/{name}", 
        new { controller="Music", action="SomeAction" }); 

다른 매개 변수는 작업에 입력을 제공 할 수 있습니다. 당신의 예에서, name 매개 변수는 다음과 일치하는 행동에 전달됩니다

public ActionResult SomeAction(string name) 
{ 
    //do something 
} 
+0

그래하지만 왜 곱슬 추가 중괄호? 음악/색인을 추가하지 않는 이유는 무엇입니까? – Exitos

+2

중괄호는 변수임을 나타냅니다. 중괄호가 아닌 경우 정적 텍스트를 의미합니다. URL에 일정 부분을 정의 할 수 있습니다. 모든 것이 변수가되는 것은 아닙니다. –

0

내가 덜 인위적인 예를 제공하려고합니다.

ASP.NET MVC의 경로는 사전에 배치되며 들어오는 요청이있을 때 MVC 파이프 라인은 요청을보고이를 라우팅 할 컨트롤러 및 작업을 결정하려고합니다.

그래서 나는 다음과 같은 컨트롤러가 있다고 가정 해 봅시다 : Home, Forum, 그리고 Article

을 우리가 그것에있어,이 전 다음과 같은 조치가 있다고 가정 해 봅시다 : View, Edit, 모두 ForumArticleCreate을 컨트롤러.

그 괄호 나를 모두 하나 개의 경로를 만들 수 있습니다 :

routes.MapRoute("Viewing", 
    {controller}/{action}/{id}, 
    new {controller = "Article", action="" }, //The article controller has precedence 
    new { controller = "Article|Forum" } //contrived for this example 
); 

그 괄호은 넣어 어떤 컨트롤러 것을 의미한다 (오래는 제약 조건에 따라 Article 또는 Forum의로), 같은 경로를 작동합니다. 이것은 포럼과 제 조자 컨트롤러에서 각각의 모든 행동을위한 경로를 가질 필요가 없도록합니다.

난 그냥 쉽게 두 개의 경로를 만들었을 수도

:

routes.MapRoute("Articles", 
    article/{action}/{id}, 
    new {controller = "Article" } //The article controller has precedence 
); 

routes.MapRoute("Forums", 
    forum/{action}/{id}, 
    new { controller = "forum" } 
); 

그러나이 일 필요는 없습니다가 중복이있다.

경로도 매우 까다 롭습니다. 순서는 중요합니다. 상단 경로는 하단 경로보다 먼저 평가됩니다. 최상위 경로 구조와 일치하면 올바른 동작이 아니더라도 해당 동작으로 이동합니다.

Phil Haack은 이것을 도와주는 Route Debugger를 가지고 있습니다. 그리고 나는 그의 소스 코드를 가져 와서 make it a control and put it on all your pages as a partial이 될 수 있도록 수정했다. (내부 사람들이 볼 수있게하는 코드도 거기에 넣기를 바란다.)

2

curlybraces는 일종의 와일드 카드를 나타냅니다.

"Music/Index" 경로는 URL 만 Music/Index

"Music/{Name}" 경로가 음악으로 시작하고 슬래시 후 아무것도 가진 모든 URL을 일치 아무것도 일치합니다. URL Music/metallicaMusic/madonna과 일치합니다.

중괄호를 사용하면 위의 URL에서 route 값으로 "metallica"또는 "madonna"를 선택할 수 있습니다.

마지막 예 : ASP.NET MVC에는 항상 표준 경로가 있습니다. {controller}/{action}/{id}. 이 경로는 Music/genre/rock 또는 Product/edit/5과 같은 URL을 잡습니다. 이 두 가지에 대한 결과 routevalues은 다음과 같습니다

  • 컨트롤러 = 음악, 액션 = 장르와 ID = 바위 마지막에 대한 첫 번째
  • 컨트롤러 = 제품, 액션 = 편집 및 ID = 5.
관련 문제