문제

ASP.NET MVC (BETA) 사이트에서 때때로 Call to ActionLink를 개발하는 경우 쿼리 문자열이 포함 된 URL로 돌아갑니다. 이 동작을 생성하는 상황을 분리했지만 청정 URL을 생성하는 대신 쿼리 문자열 매개 변수를 사용하기로 결정한 이유를 여전히 이해하지 못합니다. 나는 기능적으로 그것들이 동일하다는 것을 알고 있지만 URL의 일관성 (및 외관)은 이것이 내가 원하는 것이 아닙니다.

내 경로는 다음과 같습니다.

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

이제 문제는 "Tagged Photos"라는 경로에서 설명한 뷰를보고 다음을 통해 ActionLink를 실행할 때만 발생합니다.

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

URL을 생성하는 것 :

http://domain/group/GROUPNAME?sortBy=

다른 관점에서 생성 된 URL은 다음과 같습니다.

http://domain/group/GROUPNAME

나는 Phil을 쓰러 뜨렸다 ASP.NET 라우팅 디버거, 그리고 모든 것이 순서대로 나타납니다. 이것은 나를 막습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

왜 다른 뷰가 다른 URL을 생성하는지 잘 모르겠습니다.

그러나 첫 번째 경로에 기본값을 할당하여 해당 Sortby Param을 제거 할 수 있습니다.

new {sortby = ""}

세대 동안 SortBy가 기본값과 일치하면 경로 엔진이 해당 매개 변수를 건너 뜁니다 (쿼리 문자열에있는 경우).

다른 팁

ASP.NET에서 라우팅이 작동하는 방식 때문에 "최상의 일치"가 아니라 "첫 번째 일치"를하기 때문에 작업 경로가 아닌 이름이없는 경로를 사용해야합니다.

나는 그것이 당신의 첫 번째 경로를 집어 들고 있다고 생각합니다. 그것은 또한 행동을 모두 가지고 있습니다. SortBy가 지정되지 않기 때문에 QueryString 매개 변수로 노출됩니다.

이것은 쿼리 문자열 값으로 Sortby 매개 변수를 채우기 때문에 PhotosconTroller의 ACTION 메소드 'ALL'과 함께 작동합니다.

경로 디버거에서 3 번째 경로 또는 1 차를 실행하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top