2012-04-29 4 views
3

MapPageRoute을 사용하여 페이지로 연결되는 경로가 올바르게 작동합니다. 그러나 페이지 하단에 스크롤하여 bottom 인 특정 div을 표시하고 싶습니다. 다음 경로를 만들려고했지만 해시가 URL에 인코딩되어 페이지가 아래로 스크롤되지 않습니다. 에서해시 (#)가있는 MapPageRoute을 공식화하는 방법은 무엇입니까?

RouteTable.Routes.MapPageRoute("Topics", 
"onderwerpen/{ID}/{name}#bottom", 
"~/TopicPage.aspx" 
); 

결과 :

mydomain/onderwerpen/1/title%23bottom 

이 같은 전화 :

Response.RedirectToRoute("Topics", new { ID = 1, name = "title" }); 

답변

1

내가 가장 적합한 해결책을 찾은 것으로 생각합니다. 이 답변은 토론을위한 것입니다. 어떤 경우에는 리디렉션되지 않습니다 왜 지금을 위해 일 것이나, 주제 페이지로 나중에 경로가 다른 문자열에 "onderwerpen"에서 Glabal.asax``으로 변경되는 경우

string url = Page.GetRouteUrl("Topics", new { ID = 1, name = "title" }); 
Response.Redirect(url + "#bottom"); 
0

당신은 Response.RedirectToRoute()를 사용하여 앵커로 리디렉션 할 수 없습니다. 제공 한 코드에서 routeUrl 매개 변수에는 #bottom 앵커가 포함되어 있습니다. 들어오는 요청과 일치시키는 데 사용되는 표현식이기 때문에 앵커 태그는 routeUrl에 속하지 않습니다. routeUrl은 일치하는 표현식입니다. 그리고 세 번째 매개 변수 인 physicalFile#bottom 앵커를 추가하면 매개 변수 이름에서 알 수 있듯이 URL이 아닌 웹 서버에서 파일 이름을 지정하기 때문에 작동하지 않습니다.

왜 좋을까요? 'Response.Redirect()?

Response.Redirect("onderwerpen/1/title#bottom"); 
+0

예, 그럼 아무도 이해하지 정확히. 가능한 경우 기존 경로를 사용하는 솔루션을 선호합니다. 앵커가 포함되지 않게 경로를 변경할 수는 있지만 그 위치는 어디에서 지정해야합니까? – Bazzz

+0

무슨 뜻인지 알 겠지만 리디렉션을 설정하지 않고 기존 페이지의 URI를 변경하면 가능한 경우 피해야하는 문제입니다. 사이트의 모든 링크 및 내부 URI 참조를 변경하더라도 외부 링크 또는 책갈피는 변경할 수 없습니다. 또한 동일한 페이지에 둘 이상의 경로를 유지하는 것을 막을 수있는 방법은 없습니다. 주제에 대한 Tim Berners-Lee의 호언 장담 (http://www.w3.org/Provider/Style/URI.html)을 참조하십시오. –