2009-06-09 4 views
40

/Comments/Search/3과 같이 페이지를 라우팅하여 스레드 "3"의 모든 설명을 검색하고 표시합니다.ASP.NET MVC : URL 라우팅 대 쿼리 문자열

정렬 기능 (날짜, 작성자 등)을 추가하고 있습니다. 그것을 처리하는 가장 좋은 방법은 무엇입니까? /Comments/Search/3/Sort/Author 또는 /Comments/Search/3?sort=author?

어떻게 자동으로 querystring sort = author를 MVC의 매개 변수로 처리합니까?

감사

답변

57

내가 선호하는 :/Comments/Search/3? sort = author. 쿼리 문자열은 특히 매개 변수가 (이 경우처럼) SEO 목적에 중요하지 않은 경우 프로그래밍 매개 변수를 전달하기에 좋은 장소입니다. 매개 변수가 검색 용어로 의미 론적 의미가 있다면 첫 번째 URL이 더 좋을 것입니다.

public ActionResult Search(int id, string sort) 

ASP.NET MVC가 자동으로 메서드의 매개 변수 값을 쿼리 문자열 철사됩니다

는 컨트롤러 방법은 다음처럼 사용할 수 있습니다.

사용

routes.MapRoute(
        "Default",            // Route name 
        "{controller}/{action}/{id}",       // URL with parameters 
        new { controller = "Comments", action = "Search", id = "" } // Parameter defaults 
       ); 

/댓글/종류 = 저자가 검색 호출?/3 검색 다음과 같은 경로 (3, "저자")

/댓글/3 (/ 3 검색을 호출합니다 검색) 널 (null)

ID가 너무 URL을 실패 필수 있음을 유의하십시오 : /댓글/검색

+0

을// 댓글을 읽고 검색 할 내가이 솔루션 갈 거라고 생각 : 여기에 편리한 기사가있다. sort = 3은 선택 사항이므로 경로를 지정하고 기본값을 설정하려면 어떻게해야합니까? – pistacchio

+0

컨벤션 오버 컨벤션 때문에, 메소드의 매개 변수는 각각 'id'및 'sort'라고해야합니다. –

+2

MVC 2에서는 UrlParameter.Optional을 사용할 수 있으며 action 매개 변수로'int? 'int id' 대신에'id'를 입력하고, 빈 입력 텍스트가있는 기본 검색 UI를 표시하려면'/ Comments/Search'를 사용하십시오. – CallMeLaNN

19

ASP.NET MVC는 쿼리 문자열의 경우 자동으로 처리합니다. 액션에 string sort 매개 변수를 추가하기 만하면됩니다.

어느 것이 더 낫습니까? 개인적으로 경로를 사용하여 내용을 표시하고을 표시하고 쿼리 문자열을 표현 (표시 방법, 형식 등 ...)을 제어 할 수 있습니다. 그래서, 정렬을 위해, 나는 querystring 방법으로 갈 것입니다. 그러나 두 방법 모두 기술적 인 단점이 있다고 생각하지 않습니다.