2009-11-10 6 views
2
내가 좀 asp.net의 MVC와 함께 1 2 개 경로를 병합하려면 여기를 시도하고

asp.net MVC 선택적 매개 변수

이 루트는 다음과 같습니다

http://www.example.com/e/1

http://www.example.com/e/1,name-of-the-stuff

는 현재 Global.asax.cs이로 설정되어 있습니다 : 그것은 작동하지 않습니다

routes.MapRoute(
    "EventWithName", 
    "e/{id}{name}", 
    new { controller = "Event", action = "SingleEvent", id = "" }, 
    new { id = @"([\d]+)", name = @"^,(.*)" } 
); 

:

routes.MapRoute(
    "EventWithName", 
    "e/{id},{name}", 
    new { controller = "Event", action = "SingleEvent", id = "" }, 
    new { id = @"([\d]+)" } 
); 

routes.MapRoute(
    "SingleEvent", 
    "e/{id}", 
    new { controller = "Event", action = "SingleEvent", id = "" }, 
    new { id = @"([\d]+)" } 
); 

나는이 같은 1 차 경로를 수정하여 그것을 처리하려 2 개의 매개 변수를 슬래시 또는 적어도 하나의 문자로 구분해야합니다.

가장 좋은 생각은 id 부분 만 필요하기 때문에 정규식을 사용하는 것입니다. 이름은 설명 적이며 SEO 목적으로 사용됩니다. 기본적으로 Regex 일종의 종류의 ([\d]+),(.*)id = "$1" 또는 그런 식으로 사용할 수 있습니까? 하지 않은, http://www.example.com/Events/SingleEvent/1/name-of-the-stuff :

답변

3

은 아마

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}/{*keywords}", 
    new { controller = "Home", action = "Index", id = 0 }, 
    new { id = "(\\d+)" } 
); 
+0

나는이처럼 내 URL을 포맷 할 필요가 있습니다 정확히 내가 찾는 것. – Erick

+2

반드시 그렇지는 않습니다. 이 대답의 요점은 {* keywords} 부분입니다. 쉼표로 경로에 '*'를 추가하십시오. ", foo"부분이 선택적인 경우 두 경로를 사용하고 첫 번째 경로는 두 부분으로, 두 번째 경로는 {id}로 시도하십시오. – Brannon

+0

Brannon이 맞습니다. 나는'/ 1/what-is-new' 형식이'/ 1, what-is-new'보다 낫다고 생각합니다. StackOverflow qustion url에서 볼 수 있듯이. 어쨌든 동일한 세그먼트에서 두 개의 매개 변수를 사용할 수 없거나 두 매개 변수 사이에 리터럴 텍스트를 사용할 수 없습니다. –